Python 面向对象三大特性

        Python 的面向对象三大特性使得它成为了一种非常强大的编程语言,并且在各种应用场景中得到了广泛的应用。接下来就细致的分析一下:

类的定义与使用

class Car(object): # 定义一个类,派生自object类
    def show_info(self): # 定义成员方法
        print('This is a car')
car = Car() # 类的实例化(对象)
car.show_info() #调用对象的方法成员

数据成员和成员方法

        数据成员(attribute):创建类时用变量的形式来表示对象特征的成员

        成员方法(methods):用函数的形式表示对象行为的成员

公有成员

        公有成员:可以公开使用的,既可以在类的内部使用,也可以在外部程序中调用。

私有成员

        私有成员:在类的外部不能直接访问,一般是在类的内部进行访问和操作,或者在类的外部通过调用对象的公有成员方法来访问。

     分类:

                私有成员变量:变量名以__开头(注意:这里的下划线是2个

                私有成员方法:方法名以__开头(注意:这里的下划线是2个

      意义:

                在类中提供仅供内部使用的属性和方法,而不对外开放(类对象无法使用)

封装

        封装是面向对象编程的核心思想之一,它将对象的属性和方法封装在一起,形成一个独立的单元。通过封装,可以隐藏对象的内部实现细节,提高代码的可维护性和可重用性。

定义一个类,内部含有成员变量和私有成员方法

class Phone:
    __current_voltage = 1  #封装一个方法,代表当前手机的运行电压(私有的成员变量)

    def __keep_single_core(self):  # (私有的成员方法)
        print("单核模式")

    def call_by_5g(self):  # 公共的方法,可以被调用
        if self.__current_voltage >= 1:
            print('5g开启')
        else:
            self.__keep_single_core()
            print("电量不足")

phone = Phone()
phone.call_by_5g()
phone.__keep_single_core()  # 这里会报错,因为被封装了是私有的
print(phone.__current_voltage)   # 这里也会报错,因为是私有的

                类对象无法访问私有成员,但是类中的其他方法还是可以访问私有成员

        自己可以把当前代码的__current_voltage的值修改为0.1试一下会输出什么?

继承

        继承是面向对象编程中的另一个重要特性,它允许一个类继承另一个类的属性和方法。通过继承,可以实现代码的复用,减少代码的冗余。

  定义:

继承就是一个类,继承另外一个类的成员变量和成员方法

  语法:

class 类(父类 [父类1,父类2,...])

        类的内容体

  单继承

class phone:
    IMEI = None
    producer = 'ZZZ'

    def call_by_4g(self):
        print('4g')

class Phone666(phone):  # 这里继承了phone类,代码phone类就是Phone666的父类
    face_id = '123123'

    def call_by_5g(self):
        print('新的 5g')

A = Phone666()
print(A.IMEI, A.producer, A.face_id)
A.call_by_5g()
A.call_by_4g()

  多继承

class NFC:
    nfc_type = '第五代'
    producer = 'AAA'

    def read_card(self):
        print("NFC读卡器")

    def write_card(self):
        print("NFC写卡")


class RemoteControl:
    rc_type = '红外遥控'

    def control(self):
        print('开启红外')


class MyPhone(NFC, RemoteControl):
    pass  # 用来补全语法,不想添加新的功能


B = MyPhone()
B.control()
print(B.nfc_type)

  注意

多个父类当中,如果有同名的成员,那么默认以继承的顺序(从左到右)为优先级

即:先继承的保留,后继承的被覆盖

 复写

        定义:

子类继承父类的成员属性和成员方法之后,如果对其不满意的话,那么可以就进行复写

即:子类中重新定义的同名的属性和方法

class Phone:
    IMEI = None
    producer = 'ZZZ'

    def call_by_4g(self):
        print('4g')

class Phone2(Phone):
    producer = 'XXX'  # 对父类里面的producer进行了修改

    def call_by_4g(self):  # 对父类里面的方法的属性进行复写
        print('新的')

p = Phone2()
p.call_by_4g()
print(p.producer)

当子类已经复写了父类中的成员属性和成员方法之后,你还想用到父类中的方法该怎么办呢?

所以这时候就需要调用父类中的成员了

调用父类的同名成员

  方法1:调用父类的成员

        使用成员变量:父类名.成员变量

        使用成员方法:父类名.成员方法(self)

  方法2:使用super()调用父类成员

        使用成员变量:super().成员变量

        使用成员方法:super().成员方法()


多态

        多态是面向对象编程中的第三个重要特性,它允许不同的类对象对同一消息做出不同的响应。通过多态,可以提高代码的灵活性和扩展性。

  定义:

        指的是多种状态下,即完成某个行为的时候,使用不同的对象会得到不同的状态

class Animal:
    def speak(self):
        pass

class Dog:
    def speak(self):
        print("DDD")

class Cat:
    def speak(self):
        print("CCC")

def make_noise(animal: Animal):
    animal.speak()

dog = Dog()
cat = Cat()

make_noise(dog)
make_noise(cat)
  • 18
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值