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

时间:2016-12-22 14:05:52

标签: python python-3.x

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

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

    def get_description(self):
        return self.__description__

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

foo = Foo()
foo.get_description()
Out: "Description of Foo"

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

print(Foo.__description__)
Out: "Description of Foo"

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

这样做是明智的,可行的或不可取的:

Foo.get_description(Foo)
Out: "Description of Foo"

它似乎有效,但对我来说看起来相当难看,有没有更好的方法来做到这一点,而不必实例化Foo。实际上,我的Foo对象是数千行代码,有几十种方法,当我真的只需要静态定义的__description __

时,必须实例化它们似乎是错误的。

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

2 个答案:

答案 0 :(得分:3)

你需要一种课堂方法。

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

    @classmethod
    def get_description(cls):
        return cls.__description__

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

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

答案 1 :(得分:1)

两种方式:

首先是@classmethod

class Foo(object):

    @classmethod
    def get_description(cls):
        return "Description of Foo"

print(Foo.get_description())

其次(我认为更好的方法)是__doc__

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


print(Foo.__doc__)