文章目录(PS:觉得不错请点赞收藏支持一下)
一、继承
1.1 概念
1. 官方语言
继承:子类继承父类的属性和方法
2. 生活举例
生活中的继承,有很多种,比如:子女继承父辈的财产,徒弟继承师父的传统手艺…
3. 语法格式
# 父类 A
class A():
pass
# 子类 B
class B(A):
pass
在 Python 中,所有类默认继承 object 类, 它是*类或基类,其他子类叫做派生类。
1.2 单继承
class A():
def __init__(self):
self.name = 'hello'
def f1(self):
print('父类的 f1 方法')
class B(A):
pass
# 创建对象
b1 = B()
# 访问实例属性
print(b1.name) # hello
# 调用实例方法
b1.f1() # 父类的 f1 方法
1.3 多层继承
字面意思,一层一层的继承,实践一下就懂了
class A():
def f1(self):
print('f1')
class B(A):
def f2(self):
print('f2')
class C(B):
pass
# 创建对象
c1 = C()
c1.f1() # f1
c1.f2() # f2
1.4 多继承
解释说明:意思是一个类同时继承了多个父类。
"""
多继承: 是 python 独有的一种机制
因为 python 中没有接口概念,所以使用多继承实现接口
如果多个父类中存在同名方法,子类按顺序优先调用第一个父类的方法
"""
class A():
def f2(self):
print('A 的 f2 方法')
class B():
def f2(self):
print('B 的 f2 方法')
class C(A,B):
def f1(self):
print('C 的 f1 方法')
# 创建对象
c1 = C()
c1.f1() # C 的 f1 方法
c1.f2() # A 的 f2 方法
二、子类与父类的方法
2.1 子类调用父类指定方法
- 通过 父类名称.方法名称(self) 调用
class A():
def f1(self):
print('父类的 f1 方法')
class B(A):
def f2(self):
# 调用父类中的 f1 方法
A.f1(self)
# 创建对象
b1 = B()
b1.f2() # 父类的 f1 方法
- 通过 supper().方法名称() 调用
class A():
def f1(self):
print('父类的 f1 方法')
class B(A):
def f2(self):
# 调用父类中的 f1 方法
super().f1()
# 创建对象
b1 = B()
b1.f2() # 父类的 f1 方法
3. 如果子类定义了与父类同名的属性和方法,子类默认获取自己的属性和方法。
class A():
def __init__(self):
self.name = '父类A'
def f1(self):
print('父类的 f1 方法')
class B(A):
def __init__(self):
self.name = '子类B'
def f1(self):
print('子类的 f1 方法')
# 创建对象
b1 = B()
# 访问实例属性
print(b1.name) # 子类B
# 调用实例方法
b1.f1() # 子类的 f1 方法
4. 如果子类定义了与父类同名的属性和方法,子类还是想获取父类的属性和方法,该怎么办呢?
请细品
class A():
def __init__(self):
self.name = '父类A'
def f1(self):
print(self.name)
class B(A):
def __init__(self):
self.name = '子类B'
def f1(self):
print(self.name)
def f2(self):
A.__init__(self)
A.f1(self)
b1 = B()
b1.f2() # 父类A
print(b1.name) # 父类A
三、私有成员
如果这个属性和方法不需要外部访问,那就设置成私有的。
3.1 定义
设置私有权限的方法:在属性名和方法名 前面 加上两个下划线 __。
1. 语法格式
class 类名():
# 私有属性
__属性名 = 值
# 私有方法
def __函数名(self):
代码
2. 举例
# 私有属性和私有方法只能在类里面访问和修改。
class A():
def __init__(self):
self.__name = '张三' # 将 name 属性设置为私有,在类的外部无法访问
def __f1(self):
print('f1')
a1 = A()
print(a1.name) # 报错
a1.__f1() # 报错
3.2 获取和修改私有属性
在Python中,一般定义函数名 get_xx 用来获取私有属性,定义 set_xx 用来修改私有属性值。
class A():
def __init__(self):
self.__name = '张三' # 将 name 属性设置为私有,在类的外部无法访问
def f2(self):
print(self.__name)
def get_name(self):
return self.__name
def set_name(self,value):
self.__name = value
a1 = A()
# 通过公有方法和属性来操作类中的私有成员
# 获取
a1.f2() # 张三
# 修改
a1.set_name('老王')
print(a1.get_name()) # 老王
总结
一起进步吧