在函数中初始化静态成员变量

时间:2013-05-28 05:27:39

标签: python

是否可以在类函数中使用静态变量(如在C ++中) 以下内容并未给出我所期望的内容 动机是初始化(非常昂贵的过程)函数内的查找列表 - 但仅限于调用它时 对同一函数的后续调用不应该再次初始化变量 有没有成语来实现这个目标?
如果函数与类对齐,则很好;因此规则的值可用于'A'的所有实例

>>> class A:
...     def func(self):
...         if not hasattr(self.func,"rules"):
...             print 'initialize'
...             rules=[8,7,6]
...         rules.append(4)
...         return rules
...         
>>> a=A()
>>> for x in range(5):
...     print a.func()
...     

initialize
[8, 7, 6, 4]
initialize
[8, 7, 6, 4]
initialize
[8, 7, 6, 4]
initialize
[8, 7, 6, 4]
initialize
[8, 7, 6, 4]

2 个答案:

答案 0 :(得分:2)

class A(object): # subclass object for newstyle class
    def func(self, rules=[]):
        if not rules:
            rules[:] = [8, 7, 6]        
        rules.append(4)
        return rules

>>> a = A()
>>> for x in range(5):
        print a.func()


[8, 7, 6, 4]
[8, 7, 6, 4, 4]
[8, 7, 6, 4, 4, 4]
[8, 7, 6, 4, 4, 4, 4]
[8, 7, 6, 4, 4, 4, 4, 4]

答案 1 :(得分:1)

如果您希望变量与类关联,请将其存储在类中:

class A(object):
    def func(self):
        if not hasattr(A,"rules"):
            print 'initialize'
            A.rules=[8,7,6]
        A.rules.append(4)
        return rules