声明类中的变量(在函数外部):所有类函数都可以访问它(基本上是一个公共变量)
在类中的函数内声明一个变量:只有该函数可以访问它(它在该函数范围内)
在类中的函数内声明一个带有self(变量名)的变量:所有类函数都可以访问它(这与全局(变量名)有什么不同?)
并且由于没有私有/受保护,所以一切都是公共的,因此可以从课堂外访问从课堂内部访问的所有内容.
我应该知道还有其他细微差别吗,还是我几乎得到了它?
Thi*_*ter 112
由于您的问题中的列表并非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'
Run Code Online (Sandbox Code Playgroud)
在开始的时候,a和b只对类本身定义的变量-通过访问Test.a,并Test.b和不针对任何实例.
创建该类的实例(导致__init__执行)时:
print self.a 找不到实例变量,因此返回类变量self.a = a:a创建一个新的实例变量.这会影响类变量,因此self.a现在将引用实例变量; 访问您现在必须使用的类变量Test.aself._x创建新实例变量的赋值.它被认为"不是公共API的一部分"(又名保护),但从技术上讲,它没有不同的行为.self.__y创建名为的新实例变量的赋值_Test__y,即其名称被修改,除非您使用受损的名称,否则无法从类外部访问它.这可以用于"私人"变量.b创建局部变量的赋值.除了__init__函数之外,它不能从任何地方获得,因为它没有保存在实例,类或全局范围中.Raf*_*ler 20
在类的顶层声明变量就像声明一个静态变量或类变量一样.使用self限定它是声明一个实例变量.可以通过类名(例如Class.x = 5)引用类变量来修改类变量,并且所有实例都将继承这些更改.实例变量是实例专用的,只能由该实例修改.
您可以使用下划线实现某种级别的访问控制.请参阅Python教程中的私有变量.按照惯例,变量开始与一个下划线,例如_foo是API的非公开部分,名称以两个下划线如__foo将它的名字错位是_classname__foo.