如何正确使用静态方法?

时间:2014-05-27 11:41:58

标签: python static static-methods

来自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))

此代码通常有效吗?我想在定义成员属性时调用静态方法。

1 个答案:

答案 0 :(得分:1)

你要做的事情是行不通的。这样做的原因是Python解析名称的方式以及您定义的类型被分配给名称的方式。在您的示例中,您正在定义名称为Color的类型。在定义期间,即class内的所有内容,名称Color尚未设置,因此Python无法解析名称。这就是为什么从自己的定义中访问Color将无效。

你可以这样想过这个过程:

class <SomeAnonymousTypeName>:
    method and member definitions
Color = <SomeAnonymousTypeName>

因此只有定义之后才会分配类型名称。

相反,您必须使定义工作而不必引用类型。您还可以在定义类型后动态添加常量

class Color:
    …

Color.red = …
Color.green = …