继承:
定义一个父类
定义子类继承父类
A. 继承父类非私有的属性和方法
B. 如果子类定义了一个跟父类相同属性,先找子类的属性,然后找父类
C. 如果父类与子类有相同方法,则认为子类重写了此方法(重写:override 覆盖)
1.单继承:
所有的类默认继承object
继承其他父类的方式: class 子类(父类): pass
2. 继承了父类的非私有的属性和方法
3. 重写:父类的方法不能满足子类的需求,则定义一个跟父类名字相同的方法
每次对象调用则优先调用子类的
4. 子类方法中调用父类的方法:
方式1: Father.func(self,n)
方式2: super(Son, self).func(n)
多继承:
多继承的查找顺序:
经典类: 深度优先()
新式类: C3算法
MRO原则:
类.mro 查看顺序
print(Son.mro) —> ()
print(Son.mro()) —> []
一个类继承和调用的小代码:
class PetShop:
def __init__(self, name):
self.name = name
self.pets = set()
# 动作
def save_pet(self, pet):
# print(isinstance(pet, Pet))
if isinstance(pet, Pet):
self.pets.add(pet)
print('添加成功!')
else:
print('不是宠物不收留!')
def sale_pet(self, pet):
if isinstance(pet, Pet):
self.pets.discard(pet)
print('宠物减少')
else:
print('不是宠物不收留!')
# 查找宠物
def search_pet(self, pname):
for pet in self.pets:
if pname == pet.pname:
print('宠物在商店里')
break
else:
print('不存在此宠物!')
# 显示所有的宠物
def all_pets(self):
print('宠物商店所有的宠物信息如下:')
for pet in self.pets:
print(pet)
class Pet:
type = '宠物'
def __init__(self, pname, color, age):
self.pname = pname
self.color = color
self.age = age
def __str__(self):
return '当前类型是:{},宠物名:{}'.format(self.type, self.pname)
class Dog(Pet):
type = '狗'
def see_house(self):
print('特长看家...')
class Cat(Pet):
type = '猫'
def catch_mouse(self):
print('特长抓老鼠....')
class Bird:
pass
# 创建对象
shop = PetShop('爱宠')
# pet = Pet()
cat = Cat('花花', '黄色', 2)
bird = Bird()
shop.save_pet(cat) # pet =cat
dog = Dog('大黄', '棕色', 3)
shop.save_pet(dog)
shop.all_pets()
shop.search_pet('花')