2013-05-28 98 views
1

是否有可能在类函数中具有静态变量(如在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

是否希望将该变量“规则”与该类相关联或与实例? – BrenBarn

+0

与类 - 我已编辑的问题,以反映 – IUnknown

回答

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] 
+0

,但这将计算规则解析'A',而不是第一次使用。 –

+0

@ThomasFenzl对不起,错过了那部分 – jamylak

+0

@ThomasFenzl我已经修复了这个现在 – jamylak

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