你好,我的 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__ 时,必须实例化它们似乎是错误的
我可能在这里遗漏了一些东西,但是有人可以向我解释一下为什么我的思维方式可能有点缺陷吗?
你需要一个类方法。
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。)
| 归档时间: |
|
| 查看次数: |
641 次 |
| 最近记录: |