9 面向对象基础(二)

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__)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值