python定义一个类变量_Python类变量初始化

我想将类的一些信息存储为类(静态)变量.但是,我无法弄清楚这些东西是如何初始化的.这是一个基本的,愚蠢的例子:

class A(object):

clsVar = 'a'

@classmethod

def clsMeth(cls):

print 'changing clsVar'

cls.clsVar = 'b'

A.clsMeth()

# prints 'changing clsVar'

print A.clsVar # prints 'a'

A.clsVar = 'b'

print A.clsVar # prints 'b'

由于调用了函数(因为print语句有效),为什么类变量不会保持更改?如果在类定义完成后我不想这样做,我是否必须使用元类?

[具体来说,我希望clsMeth是一个装饰器,并让类变量成为所有装饰的函数的列表.我猜这不是实现这一目标的正确方法,所以我继续前进,但我仍然很好奇.

编辑:正如许多人所指出的,上面的代码将无法运行.我在一个IPython会话中运行它,其中对A.clsMeth()的调用将引用先前版本的A并运行.我想这就是使用解释性语言的风险.我结束了这样的事情:

outsideDict = {}

def outsideDec(func):

outsideDict[func.__name__] = func

class A(object):

@outsideDec

def someMethod(self):

print 'ID %s' % id(self)

def otherMethod(self):

print 'other'

print outsideDict

one,two = A(),A()

outsideDict['someMethod'](one)

outsideDict['someMethod'](two)

也许这应该是另一个问题,但是当outsideDec运行时,有没有办法告诉它的参数是什么类?或者,有没有更好的方法在Python中进行这样的内省?我知道我在这里偏离正轨,所以我会接受下面的答案并做更多的研究.感谢大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值