Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
声明时类内的Python字段间引用_Python_Class - Fatal编程技术网

声明时类内的Python字段间引用

声明时类内的Python字段间引用,python,class,Python,Class,我正在尝试基于同一类中的现有词典创建一个新词典。是否可以在另一个字段成员的声明中引用一个字段成员?第一次演讲需要特别的装饰吗 class Foo: dict1 = {"a": 1, "b": 2, "c": 3} dict2 = {i: Foo.dict1[i] * 10 for i in Foo.dict1} print(Foo.dict2) 您不能直接这样做,因为在计算dict2时未定义Foo。不过,解决这个问题很容易: class Foo: dict1 =

我正在尝试基于同一类中的现有词典创建一个新词典。是否可以在另一个字段成员的声明中引用一个字段成员?第一次演讲需要特别的装饰吗

class Foo:

    dict1 = {"a": 1, "b": 2, "c": 3} 

    dict2 = {i: Foo.dict1[i] * 10 for i in Foo.dict1}

print(Foo.dict2)

您不能直接这样做,因为在计算
dict2
时未定义
Foo
。不过,解决这个问题很容易:

class Foo:
    dict1 = {"a": 1, "b": 2, "c": 3} 
    _dict2 = None
    @staticmethod
    def dict2():
        if Foo._dict2 is None:
            Foo._dict2 = {i: Foo.dict1[i] * 10 for i in Foo.dict1}
        return Foo._dict2

print(Foo.dict2())
# {'a': 10, 'b': 20, 'c': 30}

一个简单的解决方案是在类的定义之后添加第二个静态成员:

class Foo:
    dict1 = {"a": 1, "b": 2, "c": 3} 

Foo.dict2 = {i: Foo.dict1[i] * 10 for i in Foo.dict1}

print(Foo.dict2)

我想出了一个更简单的解决办法。诀窍是使用.items(),它返回可以在新dict中引用的键、值元组

class Foo:
    dict1 = {"a": 1, "b": 2, "c": 3} 
    dict2 = {itm[0]: itm[1] * 10 for itm in dict1.items()}

>>>Foo.dict2
{'a': 10, 'b': 20, 'c': 30}
可能重复的