python在未实例化的类上调用方法

Rob*_*wen 1 python python-3.x

你好,我的 Python 3.5.2 代码中有一个类:

class Foo(object):
    __description__ = "Description of Foo"

    def get_description(self):
        return self.__description__
Run Code Online (Sandbox Code Playgroud)

现在我可以在 Foo 的实例中调用 get_description :

foo = Foo()
foo.get_description()
Out: "Description of Foo"
Run Code Online (Sandbox Code Playgroud)

如果我没有可用的实例,我可以这样做:

print(Foo.__description__)
Out: "Description of Foo"
Run Code Online (Sandbox Code Playgroud)

但在我的代码中,我真的不想直接访问 __description__ ,因为我进一步抽象了我的代码,以便在其他没有 __description__ 但生成描述的类(Bar、Baz 等)上使用 get_description另一种方式是使用 get_descripton() 方法。

那么这样做是明智的、可行的还是不可取的:

Foo.get_description(Foo)
Out: "Description of Foo"
Run Code Online (Sandbox Code Playgroud)

它似乎有效,但对我来说看起来相当丑陋,有没有更好的方法来做到这一点而不必实例化 Foo. 实际上,我的 Foo 对象是具有数十种方法的一千行代码,当我实际上只需要静态定义的 __description__ 时,必须实例化它们似乎是错误的

我可能在这里遗漏了一些东西,但是有人可以向我解释一下为什么我的思维方式可能有点缺陷吗?

Dan*_*man 5

你需要一个类方法。

class Foo(object):
    __description__ = "Description of Foo"

    @classmethod
    def get_description(cls):
        return cls.__description__
Run Code Online (Sandbox Code Playgroud)

现在您可以直接在类上调用该方法:Foo.get_description()

(注意,不鼓励创建自己的双下划线属性,因为这些属性是为 Python 内部使用保留的;只需使用标准名称,例如description。)