Python面向对象继承,多态和封装

多态:

# 子类和父类存在相同的方法时,父类的方法会被覆盖


class Animals(object):
    def eat(self):
        print("eating.......")
    def cry(self):
        print("crying.....")

class Dog(Animals):
    def eat(self):
        print("dogeating......")

class Cat(Animals):
    def eat(self):
        print("cateating")


dog=Dog()
dog.eat()
dog.cry()

cat=Cat()
cat.eat()
cat.cry()

继承:

# 父类
class Animals(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def eat(self):
        print('eating......')


# 设置子类,继承父类
# 封装子类时,它的参数变父类
class Dog(Animals):  # 当Dog没有构造方法时,执行Animals里面的构造方法
    def __init__(self, name, age, color):
        #         self.name = name
        #         self.age = age
        # 执行Dog的父类的构造方法;
        # 如果不先执行父类的构造方法,并且重新定义了本类的构造方法,则等于把构造方法重写
        super(Dog, self).__init__(name, age)
        self.color = color

    # 重写了eat方法
    def eat(self, food):
        print(self.color)

        if food == '骨头':
            # 执行了父类的eat方法
            super(Dog, self).eat()
        else:
            print('它不吃这个东西!')


# 创建动物对象
cat = Animals('咪咪', 1)
print(cat.name)
cat.eat()

dog1 = Dog('旺财', 2, '土黄色')
print(dog1.name, dog1.age, dog1.color)
dog1.eat('骨头')

多继承:

class D(object):
    def test(self):
        print("D test")
class C(D):
    pass
    def test(self):
        print("C test")
class B(D):
    pass
    def test(self):
        print("B test")
        
# 在Python中可以进行多继承
# 如果在继承的父类中有方法或属性冲突,就以先继承哪个类为主父类
class A(B, C):
    pass
    def test(self):
        print("A test")

d = D()
d.test()
c = C()
c.test()
b = B()
b.test()
a = A()
a.test()

你可能感兴趣的:(python,python继承,多态,封装)