从python中的函数构建一个类

时间:2012-06-19 17:06:00

标签: python class function methods partial

我已经编写了一系列函数,但一直在玩弄它们构建类的想法。我不想重写所有内容,而是想从课堂上给他们打电话。这样做的正确方法是什么?我能想到以下几点:

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

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 个答案:

答案 0 :(得分: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%相同。

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

答案 1 :(得分: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

答案 2 :(得分: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参数传入。

答案 3 :(得分:0)

前者可能会被认为更清晰 - 在__init__中创建“方法”有点令人讨厌(也意味着这些方法在类定义中不可见)。