Pon*_*dle 8 python initialization class self-reference
这是我想要解决的一个非常简单的例子:
class Test(object):
    some_dict = {Test: True}
问题是我仍然无法在定义时引用Test
通常,我只是这样做:
class Test(object):
    some_dict = {}
    def __init__(self):
        if self.__class__.some_dict == {}:
            self.__class__.some_dict = {Test: True}
但我从来没有创建过这个类的实例.这真的只是一个容器,以便容纳一组相关的功能和数据(我有几个这些类的,我绕过它们的引用,所以这是必要的测试是它自己的类)
所以我的问题是,在定义时,我怎么能引用Test,或者在定义类之后是否有类似于__init__get的内容?如果可能的话,我想self.some_dict = {Test: True}留在类定义中.到目前为止,这是我知道如何做到这一点的唯一方法:
class Test(object):
    @classmethod
    def class_init(cls):
        cls.some_dict = {Test: True}
Test.class_init()
Tho*_*ers 12
实际上,在确定类时,它确实不存在.class语句的工作方式是语句的主体作为代码块在单独的命名空间中执行.在执行结束时,该命名空间将传递给元类(例如type),并且元类使用命名空间作为属性空间创建类.
根据您的描述,测试成为一个类似乎没有必要.听起来它应该是一个模块而不是.some_dict是一个全局 - 即使它是一个类属性,你的程序中只有一个这样的属性,所以它没有比拥有全局更好 - 并且你在类中拥有的任何类方法都可以只是函数.
如果你真的想让它成为一个类,你有三个选择:在定义类之后设置dict:
class Test:
    some_dict = {}
Test.some_dict[Test] = True
使用类装饰器(在Python 2.6或更高版本中):
def set_some_dict(cls):
    cls.some_dict[cls] = True
@set_some_dict
class Test:
    some_dict = {}
或者使用元类:
class SomeDictSetterType(type):
    def __init__(self, name, bases, attrs):
        self.some_dict[self] = True
        super(SomeDictSetterType, self).__init__(name, bases, attrs)
class Test(object):
    __metaclass__ = SomeDictSetterType
    some_dict = {}
| 归档时间: | 
 | 
| 查看次数: | 545 次 | 
| 最近记录: |