Python【类与对象】文章目录Python【类与对象】一、封装1.1.概念二、继承2.1.单继承2.2.多继承三、复写3.1.复写父类的成员属性和方法3.2.调用父类的同名成员提示以下是本篇文章正文内容下面案例可供参考一、封装1.1.概念既然现实事物有不公开的属性和行为那么作为现实事物在程序中映射的类也应该支持在变量和方法前加上两个_即变为私有属性或者私有方法。classPhone:# 私有属性__currentNone# 私有方法def__cpu(self):print(cpu运行)★私有属性和私有方法不可以被类对象所使用但是可以被其他的公共的成员方法使用。二、继承通过使用继承来减少代码繁琐以此来得到父类的代码并在其基础上进行修改继承父类的方法和变量。继承分为单继承和多继承。2.1.单继承classPhone:__is_5g_enableFalsedef__check_5g(self):ifself.__is_5g_enable:print(5g开启)else:print(5g关闭使用4g网络)defcall_by_5g(self):self.__check_5g()print(正在通话中)p1Phone()p1.call_by_5g()# 继承Phone父类的属性和方法classPhone2(Phone):__is_6g_enableTrue# 使用Phone方法p2Phone2()p2.call_by_5g()2.2.多继承如果父类中有同名方法或属性先继承的优先级高于后继承语法class子类(父类1,父类2,...)# 占位语句意义在于保证函数的或类定义的完整性表示无内容空的意思pass# 定义第一个父类动物classAnimal:def__init__(self,name):self.namenamedefeat(self):通用的吃的方法print(f{self.name}正在进食)defbreathe(self):通用的呼吸方法print(f{self.name}正在呼吸)# 定义第二个父类会飞的生物classFlyable:deffly(self):飞行方法print(f{self.name}正在空中飞行)defbreathe(self):重写呼吸方法模拟方法冲突print(f{self.name}用翅膀辅助呼吸)# 定义第三个父类会游泳的生物classSwimmable:defswim(self):游泳方法print(f{self.name}正在水中游泳)# 定义子类鸭子继承 Animal、Flyable、Swimmable# 多继承的顺序会影响方法解析顺序MROclassDuck(Animal,Flyable,Swimmable):defquack(self):鸭子特有的叫的方法print(f{self.name}嘎嘎嘎叫)# 测试代码if__name____main__:# 创建鸭子实例duckDuck(小黄鸭)# 调用父类的方法duck.eat()# 继承自 Animalduck.fly()# 继承自 Flyableduck.swim()# 继承自 Swimmableduck.quack()# 子类自身的方法# 重点测试冲突的 breathe 方法Animal 和 Flyable 都有print(\n--- 测试方法冲突 ---)duck.breathe()# 会执行哪个取决于继承顺序# 查看 Duck 类的 MRO方法解析顺序print(\n--- Duck 类的 MRO 顺序 ---)print(Duck.__mro__)三、复写在子类中重新定义同名的属性和方法。3.1.复写父类的成员属性和方法classPhone:IMEINoneproducerZSdefcall_by_5g(self):print(call_by_5g)# 定义子类classPhone2(Phone):producerLS# 复写父类的成员属性# 复写父类的成员方法defcall_by_5g(self):print(self.producer)print(call_by_5g IM LS)phonePhone2()phone.call_by_5g()3.2.调用父类的同名成员调用方法父类名.成员变量父类名.成员属性super.成员变量super.成员方法classA:attrAclassB:attrBclassC(A,B):attrCdefshow_attr(self):print(自身attr:,self.attr)# Cprint(super attr:,super().attr)# A按MRO找第一个父类print(A.attr:,A.attr)# A硬编码print(B.attr:,B.attr)# B硬编码cC()c.show_attr()