为了账号安全,请及时绑定邮箱和手机立即绑定

python类中的变量范围

python类中的变量范围

收到一只叮咚 2019-07-17 15:19:34
python类中的变量范围在类中声明变量(函数之外):所有类函数都可以访问它(基本上是一个公共变量)在类内的函数中声明变量:只有该函数才能访问它(在该函数范围内)在类内的函数中声明一个具有Self.(变量名)的变量:所有类函数都可以访问它(这与全局函数(变量名)有什么不同?)由于没有私有/保护,所以所有东西都是公共的,所以从类内部访问的所有东西都可以从类之外访问。还有什么细微之处我应该知道,或者我几乎明白了?
查看完整描述

3 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

由于你的问题中的清单不是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'

一开始,ab是仅为类本身定义的变量-可通过Test.aTest.b而不是特定于任何情况。

在创建该类的实例时(这将导致__init__执行):

  • print self.a

    找不到实例变量,因此返回类变量
  • self.a = a

    *一个新的实例变量

    a

    是被创造出来的。这样就隐藏了类变量

    self.a

    现在将引用实例变量;要访问类变量,现在必须使用

    Test.a

  • 分配给

    self._x

    创建一个新的实例变量。它被认为“不是公共API的一部分”(也是受保护的),但从技术上讲,它没有不同的行为。
  • 分配给

    self.__y

    创建一个名为

    _Test__y

    ,也就是说,它的名称被损坏了,所以除非您使用损坏的名称,否则不能从类外部访问它。这可以用于“私有”变量。
  • 分配给

    b

    创建一个局部变量。它在任何地方都是不可用的,但是

    __init__

    函数,因为它没有保存在实例、类或全局范围中。


查看完整回答
1 反对 回复 2019-07-17
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

我们可以使用这个范围作为:案例1:在班里
class test:<br>     def __init__(self, a):          self.__elements = a<br>     def change_a(self): self.__elements = 5

案例2:课外 
t = test(5)

这将按对象访问._classname_Privatevaribalename

print(t._test__elements)

这将打印a‘的更改值。


查看完整回答
1 反对 回复 2019-07-17
?
弑天下

TA贡献1818条经验 获得超7个赞

在类的顶层声明变量就像声明静态变量或类变量一样。使用Self对其进行限定是在声明一个实例变量。类变量可以通过类名引用来修改。Class.x = 5),所有实例都将继承这些更改。实例变量对实例是私有的,只能由该实例进行修改。

可以使用下划线实现某种级别的访问控制。看见Python教程中的私有变量..按照惯例,变量以一个下划线开头。_foo是API的非公共部分,名称以两个下划线开头。__foo会有它的名字破损成为_classname__foo.


查看完整回答
反对 回复 2019-07-17
  • 3 回答
  • 0 关注
  • 978 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信