从 __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 

也可以。

clsself 都是约定——不像 C++ this,它是标准的。

这就是为什么你必须将它们明确地传递给类方法和方法

你也可以写

self.__class__.addInstance