Python学生第五十三天—类和对象2-继承、组合

[复制链接]
15271953841 发表于 2024-3-17 08:40:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
一、类和对象其实就是模拟现实世界的设计,Python中也是到处都是对象,无论你是否有对象,从代码的实现功能上来说,影响并不会很大,如果有对象,代码的封装会上升到一个新的高度,所以代码是非常重要的,前面学习了面向对象编程的3个基础特征之一——封装。封装就是创建对象之前,通过类,就相关属性和方法给打包到一起,然后通过类来生成相应的对象,就像工厂在批量生产以前,一般先制作一个模具,儿类就是这个模具。今天接着学习面向对象编程的基本特征之二——继承。
Python的类也是支持继承,它可以使用现有类的所有功能,并在无需重新编写代码的情况下对这些功能进行拓展,通过继承创建的新类,我们称之为子类,而被继承的类称之为父类,基类,超类。

Python 3.12.1 (tags/v3.12.1:2305ca5, Dec  7 2023, 22:03:25) [MSC v.1937 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
class A:
    x=520
    def hello(self):
        print("你好,我是A~")

        
class B(A):                 (定义类B并且它是继承自类A的)
    pass

b=B()
b.x
520
b.hello()
你好,我是A~
如果类B中存在一个类A一样的属性和方法名,会怎么样?
class B(A):
    x=880
    def hello(self):
        print("你好,我是B~")

        
b=B()
b.x
880
b.hello()               (这样它实现了覆盖,跟之前学习的局部变量和全局变量这种覆盖类似)
你好,我是B~
二、isinstance()  判断某个对象是否属于某个类,它是一个BIF。
isinstance(b,B)
True
isinstance(b,A)
True
三、issubclass()  是用于检测一个类是否是某个类的子类。
issubclass(A,B)
False
issubclass(B,A)
True
四、多重继承:一个子类可继承多个父类
class B:     (让类B不继承类A,只有重新敲一遍类B)
    x=880
    y=250
    def hello(self):
        print("你好,我是B~")

        
class C(A,B):       (创建一个类C,它是继承自类A和类B的,同时继承自两个类,称之为多重继承)
    pass

c=C()
c.x
520
c.hello()                (可见,它的访问顺序是从左到右,除非在当前类C中找不到了,它才会在左侧的父类A中也搜索未果,才会到父类B中寻找)
你好,我是A~
c.y
250
五、组合
class Turtle:
    def say(self):
        print("不积跬步无以至千里~")

        
class Cat:
    def say(self):
        print("喵喵喵~")

        
class Dog:
    def say(self):
        print("呦吼,我是一只小狗~")

        
class Garden:       (花园里面有乌龟、小猫、小狗,是使用继承吗?不对。花园与动物之间并不是从属关系,它们没有谁属于谁的说法,那么这个时候只有使用组合了。作法是将相关的实例放到花园的类里面就可以了)
    t=Turtle()
    c=Cat()
    d=Dog()
    def say(self):
        self.t.say()
        self.c.say()
        self.d.say()     (为什么say里面要加self呢?参数没传进去,它不知调用谁;没有self相当于调用Garden对象,然而Garden并没有say方法,会报错。)

        
g=Garden()
g.say()
不积跬步无以至千里~
喵喵喵~
呦吼,我是一只小狗~

QQ客服返回顶部