我有下一个代码:

class PythagoreanProof(Scene):
    CONFIG={
    "color_triangulos":YELLOW,
    "color_rect_c":RED,
    "color_rect_b":ORANGE,
    "color_rect_a":ORANGE,
    "color_cuadrado_c":ORANGE,
    "opacidad_triangulos":0.6,
    "opacidad_cuadradro_a":0.6,
    "opacidad_cuadradro_b":0.6,
    "opacidad_cuadradro_c":0.6,
    "grosor_lineas":1,
    "l_a":5/5,
    "l_b":12/5,
    "l_c":13/5,
    }
    def construct(self):
        self.wait()
        self.pre_cuadrado()
        self.pos_cuadrado()
        self.tran_pre_pos_cuadrado()
        self.wait()

    def pre_cuadrado(self):
        cuadro=Square(side_length=self.l_a+self.l_b)


如您所见,我可以通过self.l_a访问键“ l_a”

但是在这个简单得多的代码中,我得到以下错误

class Example():
     CONFIG = {'spam':25}

     def __init__(self, value):
         self.data = value

         def display(self):
             print(self.data, self.spam)

x=Example(2)
x.display()

AttributeError: 'Example' object has no attribute 'spam'


为什么在第一个示例中有效?它实际上如何运作?

谢谢!

最佳答案

至于为什么Scene继承到类PythagoreanProof时为什么可行,您需要查看Scene的代码以了解其实际作用。

在类Example中,您已将CONFIG定义为类级对象。您的方法display需要使用self.CONFIG指向该对象,然后使用键“垃圾邮件”获取其值“ 25”。

为了使RO成为CONFIG属性中的键,您可以使用@poperty包装器。

参见下面的例子

class Example():
    CONFIG = {'spam': 25}

    def __init__(self, value):
        self.data = value

    def display(self):
        print(self.data, self.CONFIG['spam'])

    @property
    def spam(self):
        return self.CONFIG['spam']

x = Example(2)
x.display()
print(x.spam)


2 25
25


请注意,某些身份不正确。方法display不应是__init__下的函数,而应是类Example下的方法。

关于python - 将Dict作为类中的局部变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60426127/

10-14 19:34
查看更多