ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python继承

2022-04-24 22:33:32  阅读:131  来源: 互联网

标签:__ Python self 继承 print 父类 class def


# _*_ coding:utf-8 _*_
# Author: 林楠
# edit time: 2022/4/24 16:44
# name: 继承.py
# Product: PyCharm

# 继承
# 继承是一种类间关系,描述一个类从另一个类获取成员信息的类间关系
# 父类提供成员信息,子类获取成员信息

"""
定义格式:
class 类名(父类名):
____pass


"""
# 演示继承

'''
class Animal:
type = "动物"
"""父类:动物类"""
def __init__(self):
self.name = None
self.age = None
def show(self):
print("小动物,我叫%s" % self.name)

class Cat(Animal):
"""子类:猫类"""
pass

c = Cat()
c.name = "毛毛"
print(c.name)
c.show()
print(Animal.type)
'''


# 继承作用
"""
继承父类的成员
变量
方法
### 注意:子类可以添加父类没有的成员,父类私有成员不可被继承
"""

'''class Animal:
type = "动物"
"""父类:动物类"""
def __init__(self):
self.name = None
self.age = None
def show(self):
print("小动物,我叫%s" % self.name)

class Cat(Animal):
"""子类:猫类"""
def climb(self):
print("猫爬树") #子类添加成员

c = Cat()
c.name = "毛毛"
print(c.name)
c.show()
print(Animal.type)
c.climb()
c.__age
'''


# 演示继承关系图
'''
class Animal:
def show1(self):
pass

class Cat(Animal):
def show2(self):
pass

class PersianCat(Cat):
def show3(self):
pass

print(Animal.__mro__)
# (<class '__main__.Animal'>, <class 'object'>)
print(Cat.__mro__)
# (<class '__main__.Cat'>, <class '__main__.Animal'>, <class 'object'>)
print(PersianCat.__mro__)
# (<class '__main__.PersianCat'>, <class '__main__.Cat'>, <class '__main__.Animal'>, <class 'object'>)

ps = PersianCat
'''


### object类是所有类的父类
## class 类名(object):
## ____pass
#使用类名.__mro__查看继承关系链


# 重写:
# 在子类中科院定义与父类相同名称的方法,此时子类的方法对父类的方法构成了重写。
# 如果子类重写了父类的方法,使用子类对象调用被重写的方法时,执行子类中重写后的方法

# 演示重写
'''
class Animal(object):
def eat(self):
print("动物吃东西")

class Cat(Animal):
def eat(self):
print("猫吃鱼")
# pass
def __str__(self):
return "喵星人"

cat1 = Cat()
cat1.eat()
print(cat1)
'''

# 演示重写关系中调用父类被覆盖的方法
"""
调用格式一:父类名.方法名(对象)
调用格式二:super(本类名,对象).方法名()
调用格式三:super().方法名()-----推荐
"""

'''
class Animal:
def __init__(self):
print("动物被创建")
def eat(self):
print("动物吃东西")

class Cat(Animal):
def __init__(self):
print("猫被创建")
super().__init__()
def eat(self):
print("猫吃鱼")
# 调用格式一:父类名.方法名(对象)
Animal.eat(self)
# 调用格式二:super(本类名,对象).方法名()
super(Cat,self).eat()
# 调用格式三:super().方法名()-----推荐
super().eat()

def __str__(self):
s = super().__str__()
print("---------")
print(s)
print("----------")
return "喵星人"

cat1 = Cat()
cat1.eat()
'''


# 多继承

"""
class 类名(父类名1,父类名2,……)
____pass
"""

'''
class Father:
def sing(self):
print("擅长唱歌")
def dance(self):
print("跳舞难看")
class Mother:
def sing(self):
print("唱歌难听")
def dance(self):
print("擅长跳舞")

class Child(Father,Mother):
def sing(self):
print("儿子不会唱歌")
Father.sing(self)
Mother.sing(self)
super().sing()

c = Child()
c.sing()
c.dance()

# 儿子不会唱歌
# 擅长唱歌
# 唱歌难听
# 擅长唱歌
# 跳舞难看

print(Child.__mro__)
# (<class '__main__.Child'>, <class '__main__.Father'>, <class '__main__.Mother'>, <class 'object'>)
'''


# 多态
# 一个对象具有多种形态,在不同的使用环境中以不同的形态展示其功能,称该对象具有多态特征
# 多态发生在继承关系的基础之上
'''
class Teacher:
def teach(self):
print("教授知识")

class Driver:
def drive(self):
print("开车")

class Man(Teacher,Driver):
def teach(self):
print("教授python知识")
def drive(self):
print("开小轿车")

class Demo:
def play(self,driver):
driver.drive()

def study(self,teacher):
teacher.teach()

# 方案一:创建司机对象
d = Driver()
# 方案二:创建了一个具有司机特征的对象
man = Man()
demo = Demo()

demo.play(man)
demo.study(man)

# 输出:
# 开小轿车
# 教授python知识
'''

# 演示鸭子类型
## 对象在语法层面满足调用关系,实际不具有对应的对象形态,称该对象此时具备鸭子类型

class Teacher:
def teach(self):
print("教知识")

class Man(Teacher):
def teach(self):
print("教授python知识")

class GamePlayer:
def teach(self):
print("教玩游戏")

class Demo:
def dothing(self,teacher):
# 来一个老师教我
teacher.teach()

d = Demo()
man = Man()
d.dothing(man) # # 输出:教授python知识

player = GamePlayer()
d.dothing(player) # 输出:教玩游戏


标签:__,Python,self,继承,print,父类,class,def
来源: https://www.cnblogs.com/chengfo/p/16187967.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有