python 类变量和类方法_在Python中,如何访问类方法中的“静态”类变量?

和所有好的例子一样,您简化了实际要做的事情。这很好,但是值得注意的是python有一个罗得当涉及到类和实例变量时的灵活性。方法也是如此。要获得一个很好的可能性列表,我建议阅读迈克尔·弗茨的新式课程游戏攻略,特别是第2至6节。

在开始的时候,有一件事需要很多工作才能记住,那就是Python不是java。不仅仅是陈词滥调。在java中,编译了整个类,使命名空间解析变得非常简单:在方法(Anywhere)之外声明的任何变量都是实例(或者,如果是静态的)变量,并且可以在方法中隐式访问。

对于python,经验法则是有三个名称空间按照顺序搜索变量:功能/方法

当前模块

内建

{begin pedagogy}

这方面有限的例外。我想到的主要问题是,当加载类定义时,类定义是它自己的隐式命名空间。但是,这只在加载模块的情况下才会持续,并且在方法中完全被绕过。因此:>>> class A(object):

foo = 'foo'

bar = foo>>> A.foo'foo'>>> A.bar'foo'

但是:>>> class B(object):

foo = 'foo'

def get_foo():

return foo

bar = get_foo()Traceback (most recent call last):

File "", line 1, in

class B(object):

File "", line 5, in B

bar = get_foo()

File "", line 4, in get_foo return fooNameError: global name 'foo' is not defined

{end pedagogy}

最后,要记住的是做可以访问您想要访问的任何变量,但可能不能隐式访问。如果你的目标简单而直接,那么使用foo.bar或auto.bar就足够了。如果您的示例变得更加复杂,或者您想要做一些花哨的事情,比如继承(您可以继承静态/类方法!),或者在类本身中引用类的名称对您来说是错误的,请查看我链接的Introo。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值