单继承
#单继承
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)#类对象是可以被类对象直接访问的,也可以被实例对象来访问