我的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 __
时,必须实例化它们似乎是错误的。我可能在这里遗漏了一些东西,但有人可以向我解释为什么我的思维方式可能有点瑕疵吗?
答案 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__)