0

我已经编写了一系列函数,但一直在玩弄使用它们来构建类的想法。我不想全部重写它们,而是想从课堂上调用它们。这样做的正确方法是什么?我可以想到以下几点:

一个无聊的功能,但它给出了这个想法。

def my_func( a_dict, a_tuple ):
    a,b = a_tuple
    a_dict[a] = b
    return a_dict

我想到的两种方法如下:

class MyDict(dict):
    def my_method(self, a_tuple):
        return my_func(self, a_tuple)

或者:

import functools
class MyOtherDict(dict):
    def __init__(self):
        self.my_parital = functools.partial(my_func, self)

有人指出,以下内容也将起作用。这似乎是最简单的!

class MySimpleDict(dict):
    my_method = my_function

问题的一个小扩展:

这样做是否常见(从方法调用函数)?

4

4 回答 4

3

甚至还有第三个:

class MyThirdDict(dict):
    my_method = my_func

这表现得好像函数是在类范围内定义的——每次访问它都会导致调用函数的__get__,从而产生一个方法。

此外,在你的第一种方法中,我会做

class MyDict(dict):
    def my_method(self, a_tuple):
        return my_func(self, a_tuple)

为了使行为100%相同。

从您的两种方法来看,第一种方法肯定更具可读性。

于 2012-06-19T17:12:33.313 回答
1

更简单的呢...

def my_func( a_dict, a_tuple ):
    a,b = a_tuple
    a_dict[a] = b
    return a_dict

class MyDict(dict):
    my_method = my_func
于 2012-06-19T17:12:46.073 回答
1

实例方法只是一个函数,它是类的一个属性,所以下面的方法在这里起作用:

class MyDict(dict):
    my_method = my_func

例如:

>>> def my_func( a_dict, a_tuple ):
...     a,b = a_tuple
...     a_dict[a] = b
...     return a_dict
... 
>>> class MyDict(dict):
...     my_method = my_func
... 
>>> d = MyDict()
>>> d.my_method(('a', 'b'))
{'a': 'b'}
>>> d
{'a': 'b'}

这看起来有点令人困惑,因为self它没有用作第一个参数名称,但它的工作方式相同。MyDict实例作为参数a_dict传入。

于 2012-06-19T17:13:07.620 回答
0

前者可能会被认为更干净——在你__init__的“方法”中创建有点讨厌(也意味着这些方法在类定义中不可见)。

于 2012-06-19T17:10:51.123 回答