订阅博客
收藏博客
微博分享
QQ空间分享

蔡慧敏,在Python中运用双下划线避免类特点被掩盖,日本综艺

频道:民生新闻 标签:abp340炒菜 时间:2019年07月12日 浏览:308次 评论:0条

在运用Python编写面向目标的代码时,咱们会常常运用“承继”这种开发方式。例如下面这一段排卵试纸怎样用代码:

class Info:
def __init__(self):
pass
def calc_age(self):
print('我是父类的办法')
class PeopleInfo(Info):
def __init__(self):
super().__init__()
def c伟人卡里和姚明合照alc_age(self):
print(123456)
仿制代码

假如你运用 PeopleIn五花肉fo 初始化一个目标,然后调用这个类的 calc_age 办法,咱们来看看运转作用,如下图所示:

Python学习交蔡慧敏,在Python中运用双下划线防止类特色被掩盖,日本综艺流群:1004391443

能够看出,父类 Info 里边的 calc_age 被子类里边的 calc_age 给“掩盖”了。

到目前为止,应该都是你现已知道的东西。那么下一个问题,请问 PeopleInfo 里边的 __init__ 会不会掩盖 Info 里边的 __init__ ?

为了承认这一点,咱们来测验一下:

class Info:
def __init__(self):
print('我是父类尼日利亚的__init__')
def calc_age(self):
print('我是父类的办法')
class Peo上下九步行街pleInfo(Info):
def __init__(sel祥元通宝f):
super().__init_米思米_()
print('我是之类的初始化办法')
def calc_age(self):
print(123456)
仿制代码

运转作用如下图所示:

这儿你发现父章公华类和子类的 __init__ 都被运转了。

不过你或许会强行解释为:在子类的 __init__ 里边,有一行 super().__init__() ,这个当地或许子类还没有彻底掩盖父类,所以先运转了父类的办法。比及子类的 __init__ 悉数履行完结今后,才会掩盖父类。

当然,这种强行诡辩显然是过错的,但为了证明这儿你看到的现象和这个 super().__init__() 没有蔡慧敏,在Python中运用双下划线防止类特色被掩盖,日本综艺任何关系,蔡慧敏,在Python中运用双下划线防止类特色被掩盖,日本综艺咱们不运用 __init__ ,而是自己界说一个:

class In方寸法神fo:
def __init__(self):
pass
def __calc_age(self):
print('我是父类的办法')
def run_fat仁吉喜目谷her(self):
self.__calc_age()
class PeopleInfo(Info):
def __init__(self):
super().__init__()
pass
def __calc_代磊新浪博客age(self):
print(123456)
def run_son(self):快吧
self.__calc_age()
仿制代码

运转作用如下图所示:

从这儿能够看出,父蔡慧敏,在Python中运用双下划线防止类特色被掩盖,日本综艺类和子类的 __calc_age 都成功运转了。

这是重生逐个黑道军嫂由于,在Python里边,类办法或许特色假如以双下划线最初,那么他们便是类的私有办法,在被承继的时分,即便子类有相同姓名的以双下划崔娅妮线最初的特色或许办法也不会掩盖父类。

并且这些以双下划线最初的私有办法或许特色,在类内部能够自在被其他办法调用,可是在实例目标里边是不能直接调用的,如下图所示:

那么Python是怎么完成这一点的呢?实际上Python仅仅是改了一个姓名罢了。咱们运用 dir 函数看看实例目标 kingname 里边有哪些内容,如下图所示:

我们请注意方框框刘萌萌的老公住的内容,其间的 _Info__calc_age 便是父类中的 __calc_age ,而 _PeopleInfo__calc_age 便是子类中的 __calc_age 。Python仅仅是改了一个姓名,在这种双下划线的私有办法或许私有特色的前面加上了 _类名 ,这样就保证了子类和父类的办法名不一致。

所以,尽管 在标准上,这种双下划曾线的私有办法和私有特色是不该该在外部拜访的 ,可是假如你想强行拜访,能够个运用这种改名今后的姓名:

kingname = PeopleIn蔡慧敏,在Python中运用双下划线防止类特色被掩盖,日本综艺fo拉皮条(蔡慧敏,在Python中运用双下划线防止类特色被掩盖,日本综艺)
kingnam睢宁天气预报e._PeopleInfo__calc_age() # 强行调用子类的私有蔡慧敏,在Python中运用双下划线防止类特色被掩盖,日本综艺办法
kingname._Info杨尚昆__calc_age() # 强行调用父类的私有办法
仿制代码

运转作用如下图所示: