来自C ++我不会让静态成员方法有效。
class Color():
def __init__(self):
print ("red")
@staticmethod
def cl(val):
return float(val / Color.colorConstant)
red = (Color.cl(1.0), 0.0, 0.0)
green = (0.0, 1.0, 0.0)
blue = (1.0, 0.0, 1.0)
purple = (1.0, 0.0, 0.0)
colorConstant = 255
我收到错误:name 'Color' is not defined # on line 9
red = (Color.cl(1.0, 0.0, 0.0))
此代码通常有效吗?我想在定义成员属性时调用静态方法。
答案 0 :(得分:1)
你要做的事情是行不通的。这样做的原因是Python解析名称的方式以及您定义的类型被分配给名称的方式。在您的示例中,您正在定义名称为Color
的类型。在定义期间,即class
内的所有内容,名称Color
尚未设置,因此Python无法解析名称。这就是为什么从自己的定义中访问Color
将无效。
你可以这样想过这个过程:
class <SomeAnonymousTypeName>:
method and member definitions
Color = <SomeAnonymousTypeName>
因此只有在定义之后才会分配类型名称。
相反,您必须使定义工作而不必引用类型。您还可以在定义类型后动态添加常量:
class Color:
…
Color.red = …
Color.green = …