如何在Python中声明静态属性?

我如何在Python中声明静态属性?

这里写我如何声明一个方法:Python中的静态方法?


在Python中的类级别上定义的所有变量都被认为是静态的

class Example:
    Variable = 2           # static variable

print Example.Variable     # prints 2   (static variable)

# Access through an instance
instance = Example()
print instance.Variable    # still 2  (ordinary variable)


# Change within an instance 
instance.Variable = 3      #(ordinary variable)
print instance.Variable    # 3   (ordinary variable)
print Example.Variable     # 2   (static variable)


# Change through Class 
Example.Variable = 5       #(static variable)
print instance.Variable    # 3  (ordinary variable)
print Example.Variable     # 5  (static variable)

你可以在同一个名字下有两个不同的变量(一个是静态的,一个是普通的)。 不要混淆。


所有在类中声明的变量都是'静态'属性。

class SomeClass:
    # this is a class attribute
    some_attr = 1

    def __init__(self):
        # this is an instance attribute
        self.new_attr = 2

但请记住,'静态'部分是按照惯例,而不是强加的(关于这方面的更多细节,请阅读此SO线程)。

有关此公约及其含义的更多详细信息,请参阅官方文档的快速摘录:

除了从对象内部不能访问的“私有”实例变量,在Python中不存在。 但是,大多数Python代码都遵循一个约定:以下划线(例如_spam)作为前缀的名称应被视为API的非公开部分(无论它是函数,方法还是数据成员) 。 它应该被视为实施细节,如有更改,恕不另行通知。

由于类私有成员有一个有效的用例(即为了避免名称与名称由子类定义的名称冲突),所以对这种称为名称修改的机制的支持有限。 任何__spam形式的标识符(至少两个前导下划线,最多一个尾部下划线)在文本上用_classname__spam替换,其中classname是当前类名称,前导下划线被去除。 只要它在类的定义内发生,就不会考虑标识符的语法位置。


为了增加它,你可以在函数中使用静态变量,而不仅仅是类:

def some_fun():
    some_fun.i += 1
    print(some_fun.i)

some_fun.i = 0;
print(some_fun(), some_fun(), some_fun())  
# prints: 1,2,3  
链接地址: http://www.djcxy.com/p/55141.html

上一篇: How to declare a static attribute in Python?

下一篇: should I use static methods or top