python-面向对象
面向对象三大特征:封装 继承 多态
封装:属性和方法封装在抽象类中 具体出来一个实物 例化
# 继承
class Animal: def eat(self): print('动物有吃的功能') def sleep(self): print('动物有睡觉')
# 继承父类Animal
class Dog(Animal): # def eat(self): # print('狗吃东西') # def sleep(self): # print('睡觉') # def run(self): print('狗跑') ha=Dog() ha.eat() ha.sleep() ha.run()
继承
class Animal: def eat(self): print('动物有吃的功能') def sleep(self): print('动物有睡觉')
# 继承 单继承:可以一直继承下去
# 继承父类Animal
class Dog(Animal): def run(self): print('狗跑') class NomalDog(Dog): def catch(self): print('抓老鼠') class GodDog(Dog): def fly(self): print('飞') xiaotian = GodDog( ) xiaotian.eat( ) xiaotian.sleep( ) xiaotian.run( ) xiaotian.fly()
多继承 class 类名(父类,父类):
class A: def demoA(self): print('A') class B: def demoB(self): print('B') class C(A,B): pass cc=C() cc.demoA() cc.demoB()
class Master: def __init__(self): self.peifang = '师傅蛋糕配方' def make_cake(self): print(f'使用{self.peifang}制作蛋糕') class School: def __init__(self): self.peifang='学校的蛋糕配方' def make_cake(self): print(f'使用{self.peifang}制作蛋糕') # 如果一个类继承多个父类,优先继承第一个类的属性和方法 class student(Master,School): pass xiaoming=student() xiaoming.make_cake()
重写
class Master: def __init__(self): self.peifang = '师傅蛋糕配方' def make_cake(self): print(f'使用{self.peifang}制作蛋糕') class School: def __init__(self): self.peifang='学校的蛋糕配方' def make_cake(self): print(f'使用{self.peifang}制作蛋糕') # 子类和父类有同名的方法和属性,会覆盖父类的方法和属性 class student(Master,School): def __init__(self): self.peifang='自创配方' def make_cake(self): print(f'使用{self.peifang}制作蛋糕') s = student() s.make_cake() super() # 指向父类 class Master: def __init__(self): self.peifang = '师傅蛋糕配方' def make_cake(self): print(f'使用{self.peifang}制作蛋糕') class School(Master): def __init__(self): self.peifang='学校的蛋糕配方' def make_cake(self): print(f'使用{self.peifang}制作蛋糕') super(School,self).__init__() super(School, self).make_cake() # 子类和父类有同名的方法和属性,会覆盖父类的方法和属性 class student(School): def __init__(self): self.peifang='自创配方' def make_cake(self): print(f'使用{self.peifang}制作蛋糕') super().__init__() super().make_cake() s = student() s.make_cake()
私有属性 属性或者方法前加__
class Girl: def __init__(self,name): self.name=name self.__age=18 def desc(self): print('大家好我是{},年龄{}'.format(self.name,self.__age)) def __desc1(self): print('大家好我是{},年龄{}'.format(self.name,self.__age)) # 一定要传一个值,创建这个类的时候,是走入到init这个函数 g=Girl('秋水') g.desc() # 私有属性不能在外部访问 #g.__desc() # 伪私有 # 解决方案 _类名__名称 g._Girl__desc()
多态 同一类型的事务,有不同的形态
传入不同的对象,产生不同的结果
多态的定义:子类重写父类的方法,调用不同子类对象的相同方法
子类重写父类的方法 两个类最好是要去继承
调用不同子类对象的相同父类方法
多态的步骤:
定义父类
定义子类
子类对象给调用者,执行后可以看到不同子类执行的效果
class Dog: def __init__(self,name): self.name=name def work(self): print('看家') class BigDog(Dog): def work(self): print('抓小偷') class SmartDog(Dog): def work(self): print('缉毒') class Person: def with_dog(self,obj): print('警员和%s一起去干什么'%(obj.name)) # 创建不同的对象会有不同的形态 xq=BigDog('小七') xb=SmartDog('HAHA') p=Person() p.with_dog(xq)
浙公网安备 33010602011771号