目录
python类的继承&动态属性设置
一、类的继承
1.定义:
子类通过继承可以获得父类的属性和方法
被继承的类叫父类(基类),继承的类叫子类 (理解为父亲和儿子的关系)
注意:私有属性(两个下划线)不能继承
2.作用:
子类通过继承可以获得父类的属性和方法,提供开发的效率及代码的复用率
3.继承关系:
- 通过继承可以获得父类的方法和属性
- 私有的属性是不能继承的(双下划线不可继承,单下划线可以继承)
4.案例:
需求1:
实现一个初始版的手机类(大哥大):只能打电话
需求2:
实现一个定义功能机类:打电话,听音乐,发短信
需求3:
实现一个智能手机类:打电话,听音乐,发短信看视频,玩游戏,手机支付,视频通话
# 需求一
class BasePhone(object):
def tell(self):
print("打电话")
# 需求二
class Phone2(BasePhone):
def send_msg(self):
print("发短信")
def music(self):
print("音乐播放")
# 需求三
class Phone3(Phone2):
def game(self):
print("打游戏")
def pay(self):
print("支付")
Phone = Phone2()
Phone.tell()
phone3 = Phone3()
phone3.tell()
输出:
打电话
打电话
5.重写父类方法
定义:在子类中定义和父类同名的方法,这个操作叫做重写父类的方法
关于方法的调用:(手机打电话功能升级,由音频通话到视频通话)【重写打电话的方法】
- 子类可以继承父类的方法,意味着子类可以调用父类的方法(父类不可调用子类的方法)
- 如果子类重写了父类的方法,那么调用该方法时,优先调用自身的方法
关于在子类的方法中,如何调用被重写的父类方法(调用父类同名的方法)
- 第一种方法:父类名.方法名(self)
- 第二种方法:super().方法名()
time模块中的sleep方法可以让程序休眠
例子
需求:打了5分钟电话之后,如果切换成视频通话
print("=======")
#例子
import time
class BasePhone(object):
def tell(self):
print("打电话语音")
class Phone4(BasePhone):
def tell(self):
print("能打电话视频")
time.sleep(5)
# 第一种方法:父类名。方法名(self)
# BasePhone.tell(self)
#第二种方法:super()。方法名()
super().tell()
phone4=Phone4()
phone4.tell()
1.需要继承的类不在同一个模块,先导入再继承
#引用包后继承
from learning.CLASS.phone import BasePhone
class PhoneVI(BasePhone):
def func(self):
print("这个是func方法")
p1=PhoneVI()
p1.tell()
二、多继承
1.一个类可以同时继承多个类,它会将所有父类的方法都继承(不同级别的父类也可继承到)---联想遗传学
#多继承 :如果一个类继承多个父类,当父类存在相同方法时,从左往右找
例子
class Base(object):
def func(self):
print("--base --func--")
class A(object):
def func_a(self):
print("--A --func--")
class B(object):
def func_b(self):
print("--B --func--")
#多继承 :如果一个类继承多个父类,当父类存在相同方法时,从左往右找,
class MyClass(Base,A,B):
def func_my(self):
print("--func_my --func--")
三、动态属性attr的设置
1.内置函数setattr:设置属性
- 参数一:类名/对象
- 参数二:属性名
- 参数三:属性值
2.内置函数getattr:获取属性
- 参数一:类名/对象
- 参数二:属性名
3.内置函数delattr:删除属性
- 参数一:类名/对象
- 参数二:属性名
例子
class MyClass(object):
ttt=999
pass
def __init__(self,gender):
self.gender=gender
m = MyClass("女🚺")
四、setattr:设置属性
1.在类外面设置类属性
- # 方式一:
MyClass.attr = 100
- # 方式二:
setattr(MyClass, "attr1", 200)
print(m.attr)
2.在类外面给对象设置属性
- #方法一
m.name="小米"
- #方法二
setattr(m,"age",18)
五、getattr:获取属性
1.在类外面获取类属性
- #方式一
print(MyClass.ttt)
- #方式二
print(getattr(MyClass,"ttt"))
2. 获取对象属性
- #方式一
print(m.gender)
- 方式二
print(getattr(m,"gender"))
六、delattr:删除属性
1.在类外面删除类属性
- #方法一
del MyClass.ttt
- #方法二
delattr(MyClass,"ttt")
2.在类外数删除对象属性
- 方法一
del m.gender
- #方法二
delattr(m,"gend")