从 __init__ 调用类方法而不重复类名
Call a classmethod from __init__ without repeating the classname
我想从 __init__
中调用 class 方法 addInstances
,而不重复 class 名称 Foo
。
class Foo():
myInstances = {}
@classmethod
def addInstance(cls, name, obj):
cls.myInstances[name]=obj
def __init__(self, name):
Foo.addInstance(name, self) # class name "Foo" is repeated
#use the class
if __name__ == "__main__":
Foo('testName')
print(Foo.myInstances)
上面的代码完成了我期望的工作。但是重复了“Foo
”。
替换线路
Foo.addInstance(name, self) # class name "Foo" is repeated
和
cls.addInstance(name, self)
导致 NameError: name 'cls' is not defined
。
只要您不将 addInstance 重写为简单方法
self.addInstance
也可以。
cls 和 self 都是约定——不像 C++ this,它是标准的。
这就是为什么你必须将它们明确地传递给类方法和方法
你也可以写
self.__class__.addInstance
我想从 __init__
中调用 class 方法 addInstances
,而不重复 class 名称 Foo
。
class Foo():
myInstances = {}
@classmethod
def addInstance(cls, name, obj):
cls.myInstances[name]=obj
def __init__(self, name):
Foo.addInstance(name, self) # class name "Foo" is repeated
#use the class
if __name__ == "__main__":
Foo('testName')
print(Foo.myInstances)
上面的代码完成了我期望的工作。但是重复了“Foo
”。
替换线路
Foo.addInstance(name, self) # class name "Foo" is repeated
和
cls.addInstance(name, self)
导致 NameError: name 'cls' is not defined
。
只要您不将 addInstance 重写为简单方法
self.addInstance
也可以。
cls 和 self 都是约定——不像 C++ this,它是标准的。
这就是为什么你必须将它们明确地传递给类方法和方法
你也可以写
self.__class__.addInstance