从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”,但由于函数定义实际上位于类之外,我认为这是可以的。