猿问

python类中的变量范围

python类中的变量范围

在类中声明变量(函数之外):所有类函数都可以访问它(基本上是一个公共变量)

在类内的函数中声明变量:只有该函数才能访问它(在该函数范围内)

在类内的函数中声明一个具有Self.(变量名)的变量:所有类函数都可以访问它(这与全局函数(变量名)有什么不同?)

由于没有私有/保护,所以所有东西都是公共的,所以从类内部访问的所有东西都可以从类之外访问。

还有什么细微之处我应该知道,或者我几乎明白了?


收到一只叮咚
浏览 1024回答 3
3回答

RISEBY

由于你的问题中的清单不是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和b是仅为类本身定义的变量-可通过Test.a和Test.b而不是特定于任何情况。在创建该类的实例时(这将导致__init__执行):print self.a找不到实例变量,因此返回类变量self.a = a*一个新的实例变量a是被创造出来的。这样就隐藏了类变量self.a现在将引用实例变量;要访问类变量,现在必须使用Test.a分配给self._x创建一个新的实例变量。它被认为“不是公共API的一部分”(也是受保护的),但从技术上讲,它没有不同的行为。分配给self.__y创建一个名为_Test__y,也就是说,它的名称被损坏了,所以除非您使用损坏的名称,否则不能从类外部访问它。这可以用于“私有”变量。分配给b创建一个局部变量。它在任何地方都是不可用的,但是__init__函数,因为它没有保存在实例、类或全局范围中。

慕田峪9158850

我们可以使用这个范围作为:案例1:在班里class test:<br> &nbsp; &nbsp; def __init__(self, a): &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self.__elements = a<br> &nbsp; &nbsp; def change_a(self): self.__elements = 5案例2:课外&nbsp;t = test(5)这将按对象访问._classname_Privatevaribalenameprint(t._test__elements)这将打印a‘的更改值。

弑天下

在类的顶层声明变量就像声明静态变量或类变量一样。使用Self对其进行限定是在声明一个实例变量。类变量可以通过类名引用来修改。Class.x = 5),所有实例都将继承这些更改。实例变量对实例是私有的,只能由该实例进行修改。可以使用下划线实现某种级别的访问控制。看见Python教程中的私有变量..按照惯例,变量以一个下划线开头。_foo是API的非公共部分,名称以两个下划线开头。__foo会有它的名字破损成为_classname__foo.
随时随地看视频慕课网APP

相关分类

Python
我要回答