python类的继承&动态属性设置

目录

python类的继承&动态属性设置

一、类的继承

1.定义:

2.作用:

3.继承关系:

4.案例:

5.重写父类方法

二、多继承

三、动态属性attr的设置

1.内置函数setattr:设置属性

2.内置函数getattr:获取属性

3.内置函数delattr:删除属性

四、setattr:设置属性

1.在类外面设置类属性

2.在类外面给对象设置属性

五、getattr:获取属性

1.在类外面获取类属性

2. 获取对象属性

六、delattr:删除属性

1.在类外面删除类属性

2.在类外数删除对象属性


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")

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值