【发布时间】:2020-11-24 14:57:52
【问题描述】:
例子
class Foo:
def __init__(self, val):
self.val = val
def f(self,arg=None):
if arg: print(arg)
else: print(self.val)
@classmethod
def otherclassmethods(cls):pass
class Foo2:
def __init__(self, val):
# self.val = val, no need that
def f(arg=val):
print(arg)
self.f = f
@classmethod
def otherclassmethods(cls):pass
我发现在__init__函数中定义一个类方法是完美的:
- 在普通的类方法中,我不再需要 self 参数了。
- Foo2不需要setattr,它是自动封装的。
- 函数看起来更类似于 c++。
如果我在__init__函数内部定义所有类成员,我更关心他们真正的实际效果。也许在概念上,__init__ 内部的闭包不是类方法,但我认为它作为类方法工作得很好。基于此,我的问题是:在__init__ 函数内部或外部定义类方法有什么区别?
请帮帮我。
【问题讨论】:
-
在
__init__内部,它不是一种方法。这只是一个本地函数。 -
@chepner 但我有
self.f = f,它变成了一个闭包并且运行良好。 -
不参与继承。
-
您是否要求了解两者之间的所有差异?因为有不少。
-
如果想要在短类中摆脱
self.name = arg模式,并且它们主要存储数据,请使用dataclass。否则,这样做会打破我认为的 Python 数据模型的许多假设。正如你可以从@MisterMiyagi 的回答中推断出来的那样。
标签: python python-3.x oop design-patterns