Python基础之继承/重写/多态/属性

单继承

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

上一篇:70.爬楼梯


下一篇:极速办公如何在Excel中进行条件计数