我正在尝试拥有一个类的默认实例.我希望有
class Foo():
def __init__(self):
....
_default = Foo()
@staticmethod
def get_default():
return _default
Run Code Online (Sandbox Code Playgroud)
然而_default = Foo()导致NameError: name 'Foo' is not defined
Foo在类定义完成之前不存在.但是,您可以在类定义之后轻松地引用它:
class Foo(object):
def __init__(self):
# ....
Foo.default_instance = Foo()
Run Code Online (Sandbox Code Playgroud)
还要注意我已经删除了多余的getter方法,而不是普通的旧属性.
您还可以使用装饰器解决问题:
def defaultinstance(Class):
Class.default_instance = Class()
return Class
@defaultinstance
class Foo(object):
# ...
Run Code Online (Sandbox Code Playgroud)
或者,无偿地,使用元类:
def defaultmeta(name, bases, attrs):
Class = type(name, bases, attrs)
Class.default_instance = Class()
return Class
# Python 2.x usage
class Foo(object):
__metaclass__ = defaultmeta
# ...
# Python 3.x usage
class Foo(metaclass=defaultmeta):
# ...
Run Code Online (Sandbox Code Playgroud)
您何时可能想要使用每种方法?
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |