9.1应用:存放家具
"""
存放家具:往家里面存放家具(床), 要考虑到家里的剩余的可用面积
"""
class Home(object):
def __init__(self, area):
self.area = area # self.area 表示家里剩余的可用面积
self.items = [] # 用来存放家具对象
def __str__(self):
names = [] # 来存放self.items列表中对象的name属性
for i in self.items:
names.append(i.name)
return "家里面存放的家具有%s,家里剩余可用面积为:%s" % (names, self.area)
def add_sth(self, obj):
# print(obj)
if self.area > obj.area:
self.items.append(obj)
# self.area = self.area - 床的面积
self.area = self.area - obj.area
class Bed(object):
def __init__(self, area, name):
self.area = area # self.area指的是床的占地面积
self.name = name
my_home = Home(150) # 创建对象
bed = Bed(4, "双人床") # 创建对象
bed02 = Bed(3, "单人床") # 创建对象
bed03 = Bed(2, "婴儿床") # 创建对象
my_home.add_sth(bed) # 存家具
my_home.add_sth(bed02) # 存家具
print(my_home)
my_home.add_sth(bed03)
print(my_home)
9.2 继承
"""
单继承: 一个类继承与另外一个类 A类继承与B类
class 子类名(父类名): # 让Dog这个类继承与Animal这个类
python2:
class Animal(): 经典类(旧式类)
class Animal(object): 新式类
python3中推荐的写法:
class Animal(object):
class Animal:
"""
class Animal(object): # 父类、基类
def eat(self):
print("--吃--")
def drink(self):
print("--喝--")
class Dog(Animal): # 子类、派生类 让Dog这个类继承与Animal这个类,子类就具有了父类的一些方法
# pass
# def eat(self):
# print("--吃--")
#
# def drink(self):
# print("--喝--")
def say(self):
print("--旺旺--")
xtq = Dog()
xtq.eat()
xtq.drink()
xtq.say()
9.3 单继承
9.4多层继承
"""
多层继承: C继承与B,B又继承与A
C类的对象能够调用B类和A类的方法
python2:
class Animal(): 经典类(旧式类)
class Animal(object): 新式类
python3中推荐的写法:
class Animal(object):
class Animal:
"""
class Animal(object): # 父类、基类
def eat(self):
print("--吃--")
# def drink(self):
# print("--喝--")
class Dog(Animal): # 子类、派生类 让Dog这个类继承与Animal这个类,子类就具有了父类的一些方法
# pass
# def eat(self):
# print("--吃--")
#
def drink(self):
print("--喝--")
class Xtq(Dog):
def say(self):
print("--旺旺--")
xtq = Xtq()
xtq.say()
xtq.drink()
xtq.eat()
9.5 多继承
"""
多继承: C类同时继承与A类和B类
"""
class A(object):
def eat(self):
print("---吃---")
def drink(self):
print("---A喝---")
class B(object):
def drink(self):
print("---B喝---")
class C(A, B):
def drink(self):
# B.drink(self)
super(A, self).drink()
print("---C喝---")
c = C()
c.drink()
print(C.__mro__)
9.6子类重写父类同名属性和方法
"""
多层继承: C继承与B,B又继承与A
C类的对象能够调用B类和A类的方法
python2:
class Animal(): 经典类(旧式类)
class Animal(object): 新式类
python3中推荐的写法:
class Animal(object):
class Animal:
"""
class Animal(object): # 父类、基类
def eat(self):
print("--Animal吃--")
# def drink(self):
# print("--喝--")
class Dog(Animal): # 子类、派生类 让Dog这个类继承与Animal这个类,子类就具有了父类的一些方法
# pass
def eat(self):
print("--Dog吃--")
def drink(self):
print("--喝--")
def say(self):
print("--旺旺--")
class Xtq(Dog):
def say(self): # 重写的概念:子类的方法名和父类的方法名一致的时候,我们就说子类重写了父类的方法
# 重写的特点:子类的对象调用这个方法的时候,执行的子类的方法
print("--吼吼--")
# def eat(self):
# print("--xtq吃--")
xtq = Xtq()
xtq.say()
xtq.drink()
xtq.eat()
print(Xtq.__mro__) # 类名.__mro__ 描述的是,和这个类有继承关系的一些类,作为每一个元素以元组的方式展示
9.7子类调用父类同名属性和方法
"""
# 有3种格式来调用重写了的父类方法
# Dog.say(self) # 父类名.方法名(self)
# super().say() # super().方法名()
# super(Xtq, self).say()
super(指定一个类名, self).方法名()
指定一个类名:调用的就是这个指定类的上一级(上一级就是Xtq.__mro__中后面的一个类)的类的方法
"""
class Animal(object): # 父类、基类
def eat(self):
print("--Animal吃--")
# def drink(self):
# print("--喝--")
class Dog(Animal): # 子类、派生类 让Dog这个类继承与Animal这个类,子类就具有了父类的一些方法
# pass
def eat(self):
print("--Dog吃--")
def drink(self):
print("--喝--")
def say(self):
print("--旺旺--")
class Xtq(Dog):
def say(self):
# 有3种格式来调用重写了的父类方法
# Dog.say(self) # 父类名.方法名(self)
# super().say() # super().方法名()
# super(Xtq, self).say() super(Xtq, self).方法名()
# super(Dog, self).eat() # super(Xtq, self).方法名()
print("--吼吼--")
xtq = Xtq()
xtq.say()
print(Xtq.__mro__)