单继承

继承:
字面意思:儿子可以完全使用父亲的所有内容
专业角度:如果B类继承A类,B类就称为子类,派生类;A类就称为父类,基类,超类
面向对象三大特性之一:继承,封装,多态
继承:单继承,多继承

代码重复,冗余

class Human:
    def __init__(self, name, sex, age):
        self.name = name
        self.age = age
        self.sex = sex


class Dog:
    def __init__(self, name, sex, age):
        self.name = name
        self.age = age
        self.sex = sex


class Cat:
    def __init__(self, name, sex, age):
        self.name = name
        self.age = age
        self.sex = sex

继承的优点:
1、减少重复代码
2、增加类之间的耦合性
3、代码更加清晰,流畅

# Animal 父类,基类,超类
class Animal:
    def __init__(self, name, sex, age):
        self.name = name
        self.age = age
        self.sex = sex


# Human,Dog,Cat 子类,派生类

class Human(Animal):
    pass


class Dog(Animal):
    pass


class Cat(Animal):
    pass


person = Human("yulin", "男", 22)
print(person.name)

一、类名执行父类属性方法

class Animal:
    live = "有生命的"

    def __init__(self, name, sex, age):
        self.name = name
        self.age = age
        self.sex = sex
    
    def eat(self):
        print("动物都需要进食")


class Human(Animal):
    live = "有思想的活着"


print(Human.live)
Human.eat(111)

二、派生类对象执行父类的属性方法
查询顺序单项不可逆:子类使用父类的属性方法,父类不能使用子类的属性方法

class Animal:
    live = "有生命的"

    def __init__(self, name, sex, age):
        self.name = name
        self.age = age
        self.sex = sex
    
    def eat(self):
        print("动物都需要进食")


class Human(Animal):
    body = "身体"


obj = Human("yulin", "男", 22)
print(obj.live)
obj.eat()

三、既要执行子类的方法,又要执行父类的方法
方法一:不依赖继承

class Animal:
    def __init__(self, name, sex, age):
        self.name = name
        self.age = age
        self.sex = sex


class Human:
    def __init__(self, name, sex, age, hobby):
        """

        :param name: yulin
        :param sex: 男
        :param age: 22
        :param hobby: 打桌球
        """
        # Animal.__init__(人类对象,姓名,性别,年龄)
        Animal.__init__(self, name, sex, age)  # self = obj
        self.hobby = hobby


class Dog(Animal):
    pass


class Cat(Animal):
    pass


obj = Human("yulin", "男", 22, "打桌球")
print(obj.__dict__)

方法二:依赖继承

class Animal:
    def __init__(self, name, sex, age):
        self.name = name
        self.age = age
        self.sex = sex

    def eat(self):
        print("动物都需要吃饭")


class Human(Animal):
    def __init__(self, name, sex, age, hobby):
        # super(Human, self).__init__(name, sex, age)  # super执行父类的方法(完整的写法)
        super().__init__(name, sex, age)  # 重构父类方法(简单写法)
        self.hobby = hobby

    def eat(self):
        print(f"{self.name}都需要吃饭")


obj = Human("yulin", "男", 22, "打桌球")
print(obj.__dict__)

单继承练习
1

class Base:
    def __init__(self, num):
        self.num = num

    def func1(self):
        print(self.num)


class Foo(Base):
    pass


obj = Foo(123)
obj.func1()

2

class Base:
    def __init__(self, num):
        self.num = num

    def func1(self):
        print(self.num)


class Foo(Base):
    def func1(self):
        print("Foo. func1", self.num)


obj = Foo(123)
obj.func1()

3

class Base:
    def __init__(self, num):
        self.num = num

    def func1(self):
        print(self.num)
        self.func2()
    
    def func2(self):
        print("Base.func2")


class Foo(Base):
    def func2(self):
        print("Foo.func2")


obj = Foo(123)
obj.func1()

4

class Base:
    def __init__(self, num):
        self.num = num

    def func1(self):
        print(self.num)
        self.func2()
    
    def func2(self):
        print(111, self.num)


class Foo(Base):
    def func2(self):
        print(222, self.num)


lst = [Base(1), Base(2), Foo(3)]
for obj in lst:
    obj.func2()

5

class Base:
    def __init__(self, num):
        self.num = num

    def func1(self):
        print(self.num)
        self.func2()
    
    def func2(self):
        print(111, self.num)


class Foo(Base):
    def func2(self):
        print(222, self.num)

lst = [Base(1), Base(2), Foo(3)]
for obj in lst:
    obj.func1()
posted @ 2020-11-18 08:16  Ylinn  阅读(238)  评论(0)    收藏  举报