单继承
继承:
字面意思:儿子可以完全使用父亲的所有内容
专业角度:如果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()

浙公网安备 33010602011771号