Python基础(拾2) 类私有成员和护卫成员

python中的protected和private

python中用

_var
;变量名前2个下划线来定义,此变量为保卫安全成员protected,唯有类及其子类可以访问。此变量无法透过from
XXX import xxx 导入

__var;变量名前八个下划线来定义,此变量为私有private,只同意类本人访问,连子类都不能访问。

 

class perent_class(object):
    def __init__(self,name,protected,private):
        self.name = name
        self._protected = protected
        self.__private = private

 

Linux and
python学习交换1,二群已满.

Linux and
python学习调换3群新开,欢迎加入,壹起学习.qq 三群:5632278九四

不前进,不倒退,甘休的境况是不曾的.

壹道前行,与君共勉,

 

四礼拜八次课(四月20日)

1.贰 重写特殊的构造方法

class A():
    def __init__(self):
        self.__name = 'python'  # 私有变量,翻译成 self._A__name='python'

    def __say(self):  # 私有方法,翻译成 def _A__say(self)
        print self.__name  # 翻译成 self._A__name


a = A()
# print a.__name #访问私有属性,报错!AttributeError: A instance has no attribute '__name'
print a.__dict__  # 查询出实例a的属性的集合
print a._A__name  # 这样,就可以访问私有变量了
# a.__say()#调用私有方法,报错。AttributeError: A instance has no attribute '__say'
print dir(a)  # 获取实例的所有属性和方法
a._A__say()  # 这样,就可以调用私有方法了

__doc__ :类的文书档案字符串

在此地强调说一下私有变量,python暗许的分子函数和分子变量都以当面包车型地铁,未有像任何类似语言的public,private等首要字修饰.不过足以在变量前边加上两个下划线”_”,那样的话函数或变量就改成私有的.那是python的私家变量轧压(这么些翻译好拗口),英文是(private
name mangling.)
**地方就是当变量被标记为私有后,在变量的前端插入类名,再类名前添加三个下划线”_”,即形成了_ClassName__变量名.**

结果:

{'_A__name': 'python'}
python
['_A__name', '_A__say', '__doc__', '__init__', '__module__']
python

例子1:

2、 __xx
双下划线的象征的是个人类型的变量。只好同意那个类自己实行走访了,连子类也不可以用于命名3个类属性(类变量),调用时名字被改变(在类FooBar内部,__boo变成_FooBar__boo,如self._FooBar__boo)

在Python中得以经过在质量变量名前丰裕双下划线定义属性为私有质量

B类也能够重写这些hello方法

非同一般变量命名

2、使用super函数

结果:

一.一 重写壹般方法

class A:
    def hello(self):
        print('Hello,i am A.')
class B(A):
    def hello(self):  
        print('Hello,i am B.')
a = A()
b = B()
a.hello()
b.hello()
Hello,i am A.
Hello,i am A.
class A:
    def hello(self):
        print('Hello,i am A.')
class B(A):
    pass
a = A()
b = B()
a.hello()
b.hello()

结果:

2、类的私家变量

结果:

Squawk!
Aaaah...
No,thanks!

相关文章