python基础(13)-继承基础

面向对象三大要素:封装,继承,多态,这其中有一个不会用就应该不算会用面向对象语言吧

前面我简单讲了一下封装,那么这一节要讲解继承

不过我想在讲解这个地方之前, 想先讨论一下,是否大家还记得C++的菱形问题

如果不记得,也无所谓,我只想说,虽然C++和python都支持多继承的问题,但是我们在这里不考虑多继承,因为多继承很有可能会造成很大的问题,没有必要去冒着风险学习多继承,所以我们还是就是认认真真把单继承学好就行(其实我是看了其他很多面向对象语言取消了多继承才这样说

废话不多说,来看一下继承问题:

```

class people():

    name= 'people'

    age= '23'

    def setname(self,name):

        self.name= "people"+" "+name

    def setage(self,age):

        self.age= age

class person(people):

    name= 'person'

    def setname(self,name):

        self.name= "person"+" "+name

a= person()

print(a.name)

a.setname("aaa")

a.setage(30)

print(a.name)

print(a.age)

people.setname(a,"qqq")#非绑定方法的调用

print(a.name)

输出结果:

person

person aaa

30

people qqq

```

我举这个例子,主要是为了说明大多数的情况,这里不考虑构造函数,私有继承这两块,我只说明的是普通的继承的情况

1、首先父类和子类名称还有方法不重名,可以看到,子类完全继承了父类

2、父类和子类出现了重名,可以看到重名的子类覆盖了父类

目前我们记住这两点就够了,后面还会再讲一下,对了,如果你一定要是用多继承如:

person(people,animal)这样,那么如果也出现重名的话,那么优先会使用排在前面的,当然,最好不这么用

但是文章写到这里之后,我突然想起一个问题,因为之前没有讲到什么是绑定方法调用,什么是非绑定方法调用

如果我们实例化一个类,通过对象调用这个方法,这是绑定方法的调用

如果是通过类来,然后把对象当做参数传进去,那么就是非绑定方法调用

如:

```

a = person()

a.setname("www")这就是绑定方法的

people.setname(a,“www”)这就是非绑定方法

```

通过非绑定方法,可以让被重写的父类的方法重新恢复了,这是我为啥一定要介绍这个

===============================================================

讲到这里,剩下还有几个点需要注意一下

1、私有成员(包括私有的属性+方法)是否可以继承,先看个例子:

```

class people():

    name= 'people'

    __age= '23'

    def setname(self,name):

        self.name= "people"+" "+name

    def __funa(self):

        print("wwww")

def funb(self):

        self.__funa()

class person(people):

    name= 'person'

    def setname(self,name):

        self.name= "person"+" "+name

    @property

    def age(self):

        return self.__age

a= person()

a.funb()

print(a.age)#打印错误

报错:'person' object has no attribute '_person__age'

很清楚的说明了就是私有成员是没有办法继承的

第二点:super函数的使用,这个是相对于多继承才会使用:

class People:

    def __init__(self,name):

        self.name=name

    def say(self):

        print("我是人,名字为:",self.name)

class Animal:

    def __init__(self,food):

        self.food=food

    def display(self):

        print("我是动物,我吃",self.food)

class Person(People,Animal):

#自定义构造方法

    def __init__(self,name,food):

#调用 People 类的构造方法

        super().__init__(name)

#super(Person,self).__init__(name) #执行效果和上一行相同

#People.__init__(self,name)#使用未绑定方法调用 People 类构造方法

#调用其它父类的构造方法,需手动给 self 传值

    Animal.__init__(self,food)

per=Person("zhangsan","熟食")

per.say()

per.display()

```

看到没,这是如果是多继承的话,存在一个问题,就是在继承的时候,优先选择第一个,然后就是那我们想两个父类的构造函数都可以使用,那么就自己在person的构造函数中,调用前两个父类的构造函数即可;其中super()函数代表的是第一个父类可以用绑定方法的方式来调用;但是对于第二父类也就是animal来说,就不行了;他只能是用非绑定的方法进行调用;可以看到第一个参数也是self,代表的是被person所继承,使用的对象是person创建出的对象;然后第二个参数是food,代表给从animal继承而来的food进行赋值;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354