学习笔记 开发工具:Spyder 文章目录 继承 例子1 例子2(isinstance) 例子3(issubclass) 举个例子4(变量继承) 相关概念 继承 定义 可以重用
学习笔记
开发工具:Spyder
文章目录
- 继承
- 例子1
- 例子2(isinstance)
- 例子3(issubclass)
- 举个例子4(变量继承)
- 相关概念
继承
- 定义
可以重用现有类的功能与概念,并在此基础上进行扩展。
- 优缺点
优点:①一种代码复用的方式。②以层次化的方式管理类。
缺点:耦合度高
- 语法
def __init__(self, 参数列表):
super().__init__(参数列表)
self.自身实例变量 = 参数
- 说明
①子类拥有父类的所有成员。
②子类如果没有构造函数,将自动执行父类的,但如果有构造函数将覆盖父类的。此时必须通过super()函数调用父类的构造函数,以确保父类属性被正常创建。
③子类直接具有父类的成员(共性),还可以扩展新功能。
- 作用
隔离客户端代码与功能的实现方式(隔离用和做)。
- 多继承
多继承即一个子类继承两个或两个以上的基类,父类中的属性和方法同时被子类继承下来。
例子1
代码:
class Person:def say(self):
print("说")
class Student(Person):
def study(self):
print("学习")
class Teacher(Person):
def teach(self):
print("教")
s01 = Student()
s01.study()
# 可以直接使用父类成员
s01.say()
p02 = Person()
p02.say()
# 父类不能使用子类成员
# p02.study()
t03 = Teacher()
t03.teach()
# 不能使用"兄弟"类成员
# t03.study()
结果:
例子2(isinstance)
isinstance()方法可以鉴定一个对象是否兼容一个类
代码:
class Person:def say(self):
print("说")
class Student(Person):
def study(self):
print("学习")
class Teacher(Person):
def teach(self):
print("教")
s01 = Student()
p02 = Person()
# 判断一个对象是否"兼容"一个类型
print(isinstance(s01,Person)) # True
print(isinstance(s01,Student)) # True
print(isinstance(s01,object)) # True
#一个类要么直接,要么间接的继承object类
print(isinstance(s01,Teacher)) # False
print(isinstance(p02,Student)) # False
结果:
例子3(issubclass)
issubclass()方法可以判断一个类是否为另一个类的子类
代码:
class Person:def say(self):
print("说")
class Student(Person):
def study(self):
print("学习")
class Teacher(Person):
def teach(self):
print("教")
# 判断一个类是否"兼容"一个类型
print(issubclass(Student,Person)) # True
print(issubclass(Student,Teacher)) # False
print(issubclass(Student,(Teacher,Person))) # True
#(Teacher,Person)中只要有一个为Student类的父类,就会返回True,否则为False
print(issubclass(Student,Student)) # True
结果:
举个例子4(变量继承)
代码:
class Person:def __init__(self,name):
self.name = name
class Student(Person):
def __init__(self,name,score):
# 通过函数,调用父类方法
super().__init__(name)
self.score = score
class Teacher(Person):
def __init__(self,name,salary):
super().__init__(name)
self.salary = salary
s01 = Student("zs",100)
print(s01.score)
print(s01.name)
p02 = Person("ww")
print(p02.name)
结果:
内存图:
相关概念
父类(基类、超类)、子类(派生类)。
父类相对于子类更抽象,范围更宽泛;子类相对于父类更具体,范围更狭小。
单继承:父类只有一个(例如 Java,C#)。
多继承:父类有多个(例如C++,Python)。
Object类:任何类都直接或间接继承自 object 类。
【文章出处:香港多ip站群服务器 http://www.558idc.com/hkzq.html提供,感恩】