从python中的函数构建类

从python中的函数构建类,python,class,function,methods,partial,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): retu

我已经编写了一系列函数,但一直在考虑使用它们来构建一个类。与其全部重写,我想在课堂上给他们打电话。正确的做法是什么?我可以想到以下几点:

一个无聊的函数,但它给出了想法

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)
或:

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

class MySimpleDict(dict):
    my_method = my_function
问题的稍微延伸:


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

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

前者可能被认为更干净-在
\uuuuuu init\uuuu
中创建“方法”有点讨厌(这也意味着这些方法在类定义中不可见)。

甚至还有第三种方法:

class MyThirdDict(dict):
    my_method = my_func
这就好像函数是在类作用域中定义的一样——对它的每次访问都会导致调用函数的
\uuuu get\uuuu
,从而生成一个方法

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

class MyDict(dict):
    def my_method(self, a_tuple):
        return my_func(self, a_tuple)
为了使行为100%相同


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

甚至还有第三种方法:

class MyThirdDict(dict):
    my_method = my_func
这就好像函数是在类作用域中定义的一样——对它的每次访问都会导致调用函数的
\uuuu get\uuuu
,从而生成一个方法

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

class MyDict(dict):
    def my_method(self, a_tuple):
        return my_func(self, a_tuple)
为了使行为100%相同


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

那么更简单的方法呢

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

那更简单的

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

实例方法只是类的一个属性函数,因此以下内容在这里适用:

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
参数传入。

实例方法只是作为类属性的函数,因此以下操作在这里有效:

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
参数传入。

您会推荐第三种方法吗?它显然看起来最简单!@Themanontheclaphamnibus是的,我会的。虽然它可能不是最简单的对于新手来说,它是最直观的,最接近于有意图的方法,也就是首先使用特殊的“self”参数的函数。唯一的缺点是这个参数不是“self”关于实际函数,但由于函数定义实际上位于类之外,我认为这是可以的。你会推荐第三种方法吗?它看起来确实是最简单的!@Themanntheclaphamnibus是的,我会的。虽然它对新手来说可能不是很直观,但它最接近于有意图的方法,即采用规范的函数ial的“self”参数作为第一个参数。唯一的缺点是,这个参数在实际函数中不被称为“self”,但由于函数定义实际上位于类之外,我认为这是可以的。