#单继承 class Animal: def eat(self): print('吃东西啦') pass def drink(self): pass class Dog(Animal): # 继承过程 def wwj(self): print('dog wangwangjiao') class Cat(Animal): # 继承过程 def mmj(self): print('cat miaomiaojiao') pass pass d1 = Dog() d1.eat() c1 =Cat() c1.mmj()
#多继承 class god: def fly(self): print('god can fly') pass class monkey: def eat(self): print('monkey like eat 桃子') pass class Sunwukong(god,monkey): def qujing(self): print('孙悟空要取经') pass swk = Sunwukong() swk.eat() class D(object): def eat(self): print('D.eat') pass pass #问题;当多个父类中存在相同方法中,应该调用哪一个 class C(D): def eat(self): print('C.eat') pass class B(D): pass class A(B,C): pass a=A() a.eat() #在执行eat的方法时,查找方法的顺序是 #首先A中查找,A没有,那么去B,B没有,就去C 先去找各个父亲 父亲没有就去找爷爷 #重写父类方法
class Father: def __init__(self, name, color): self.name = name self.color = color def smoking(self): print('抽芙蓉王') def drinking(self): print('喝茅台') pass pass class son(Father): def __init__(self, name, color): Father.__init__(self, name, color) # 手动调用父类的方法,执行完就具备name和color的实例属性 pass # 拓展其他属性 self.height = 90 self.weight = 20 super().__init__(name, color) # super是自动的找到父类方法,进而调用方法 # 假设继承多个父类,那么会按照顺序逐个去找,进而调用。 def __str__(self): return '{}的颜色是{},身高是{},体重是{}'.format(self.name, self.color, self.height, self.weight) def smoking(self): super().smoking() print('抽华子') print(self.name) pass ez = son('Jack', 'red') ez.somking() ez.drinking() print(ez)
实现多态有两个前提需要遵守:1.继承:多态必须发生在父类和子类之间;2.重写:子类重写了父类的方法
class Animal: """ 父类【基类】 """ def say_who(self): print('我是一个动物----') pass pass class Duck(Animal): """" 子类【派生类】 """ def say_who(self): """ 在这里重写了父类方法 :return: """ print('我是一只好鸭子') pass pass class Dog(Animal): def say_who(self): """ :return: """ print('我是一条好狗子') class Cat(Animal): def say_who(self): print('我是一只小花猫') pass class Bird(Animal): """ 新增鸟类 """ def say_who(self): print('我是一只小小鸟') pass def commonInvoke(obj): """ 统一调用方法 :param obj: 对象的实例 :return: """ obj.say_who() # duck1=Duck() # duck1.say_who() # dog=Dog() # dog.say_who() # cat=Cat() # cat.say_who() listobj = [Duck(), Dog(), Cat(),Bird()] for item in listobj: """ 循环调用函数 """ commonInvoke(item) pass
# 属性:类属性和实例属性 # 类属性 就是类对象所拥有的属性 class Student: name = "LiMing" # 属于Student类对象所拥有的属性 def __init__(self, age): self.age = age # 实例属性 pass pass lm = Student(18) print(lm.name) #通过实例对象访问类属性 print(lm.age) print('---通过类对象Student来访问name----') print(Student.name)#类对象是可以被类对象直接访问的,也可以被实例对象来访问