在类中声明变量(在函数之外):所有类函数都可以访问它(基本上是公共变量)
在类内的函数内声明变量:只有该函数可以访问它(它在该函数的范围内)
声明一个变量self.(variable name)
在类内的函数内部:所有类函数都可以访问它(这与global (variable name)
?)
由于没有私有/受保护,所以一切都是公共的,因此从类内部访问的所有内容都可以从类外部访问。
还有其他我应该知道的细微差别吗?或者我已经了解了吗?
由于您问题中的列表并不是 100% 清楚,我决定用一个简单的例子来解释它。它还包括一些东西,比如__something
您在列表中未提及的变量。
class Test:
a = None
b = None
def __init__(self, a):
print self.a
self.a = a
self._x = 123
self.__y = 123
b = 'meow'
一开始,a
and b
仅是为类本身定义的变量 - 可通过Test.a
and Test.b
并且不特定于任何实例。
创建该类的实例时(这会导致__init__
正在执行):
-
print self.a
找不到实例变量,因此返回类变量
-
self.a = a
:一个新的实例变量a
被建造。这会遮蔽类变量,因此self.a
现在将引用实例变量;要访问您现在必须使用的类变量Test.a
- 分配给
self._x
创建一个新的实例变量。它被认为“不是公共 API 的一部分”(又名受保护),但从技术上讲它没有不同的行为。
- 分配给
self.__y
创建一个名为的新实例变量_Test__y
,即它的名称被损坏,因此除非您使用损坏的名称,否则无法从类外部访问它。这可用于“私有”变量。
- 分配给
b
创建一个局部变量。它不能从任何地方获得,除了__init__
函数,因为它不保存在实例、类或全局范围中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)