用人话讲计算机:python篇!(十六)面向对象的魔术方法、继承、方法重写、多态(下)

发布于:2025-02-10 ⋅ 阅读:(64) ⋅ 点赞:(0)

目录

一、常用魔术方法

1.__init__方法  

2.__str__方法 

3.__del__方法

4.其他方法

二、继承

1.概念

2.单继承

3.多继承

三、方法重写

四、多态


一、常用魔术方法

 所谓魔术方法,就是面向对象过程中方法左右各有两个英文状态下的 “_”的方法

这些方法允许我们定义类的某些操作,比如创建对象、实例化、字符串表示等。它包括以下:


1.__init__方法  

 创建了一个后,当我们需要实例化一个对象时,就需要用到这个方法,它的作用在于初始化对象

你也可以这么理解:

给对象添加属性时,要用init方法。 

格式: 

    def __init__(self,属性1, 属性2,……):
        self.属性1名 = 属性1
        self.属性2名 = 属性2

示例:

2.__str__方法 

定义对象的 字符串表示,即当你想打印或查看该对象时,返回一个人类可读的描述。

你也可以这么理解:

输出一串字符串

格式:

def __str__(self):
    return 你要输出的字符        #示例:f"Person: {self.name}, Age: {self.age}"

比如:

    class Person:
        def __init__(self, name, age):
            self.name = name
            self.age = age

        def __str__(self):
            return f"Person: {self.name}, Age: {self.age}"

    # 创建对象
    person = Person("Alice", 30)

    # 当调用 print(person) 时,会自动调用 person.__str__()
    print(person)  # 输出 "Person: Alice, Age: 30"

3.__del__方法

定义对象被销毁要执行的操作。

格式:

def __del__(self):
    代码代码

比如,我们想让某对象删除前输出一句话,我们可以如下:

class a:
    def __init__(self, name):
        self.name = name
    
    def __del__(self):
        print(f"{self.name} is being deleted")

# 创建对象
obj = a("Object1")
del obj  # 会输出 "Object1 is being deleted"

4.其他方法

除此之外,还有很多方法,比如:add、new、repr等。

这里不作一一赘述。

二、继承

1.概念

在编程中,继承是一种允许我们基于现有代码创建新代码的机制。它是一种使得 新创建的类(称为子类或派生类)可以继承另一个类(称为基类或父类)的属性和方法的 面向对象编程概念。

简单来说:即

一个类(子类)继承另一个类(父类)的属性和方法。

比如我们创建了一个类a,具有很多属性和方法

现在我想再写一个类似a一样的类b,这时我们可以让类b从类a那继承

这样我们就不用再写一遍了。

其他的关于词汇概念:

  • 关于那个具有很多属性和方法的,我们称它为基类(父类)
  • 关于那个要去继承的,我们称它为子类(派生类)

同样的继承也分为两种:单继承和多继承。

2.单继承

单继承是指一个子类只能直接继承一个父类。也就是说,子类只能有一个父类。

格式:

比如父类是a,子类是b。

class a:
    a类的属性和方法代码

class b(a):
    b类的属性和方法代码

这样此时,b类中虽然只有关于b类的属性和方法代码,但是,它其实已经同样具备了a类的属性和方法代码。

比如:

上图中,c只实例化了b()

但是调用两个方法时,c都可以输出

3.多继承

多继承是指一个子类可以同时继承多个父类。这样可以让子类拥有多个父类的属性和方法。

格式:

比如父类1是a1,父类2是a2,子类是b

class b(a1, a2):
    b的其他属性和方法代码

和单继承格式差不多,就是在括号里不同而已。

示例:


我们需要注意,在这些父类当中,最好不要出现相同名字的方法,否则会出现问题,即方法冲突

也要注意,如果父类a1和父类a2来自于同一个父类A,那我们若是让子类b去继承a1和a2又会出现新问题,即菱形继承问题

三、方法重写

方法重写指的是在子类中重新定义一个与父类同名的方法。

这样就可以实现覆盖父类中某一方法,以实现不同功能。

举个例子:

比如父类a有方法1,2,3以实现不同功能

然后子类b继承了父类a的所有方法

现在我想让b继承方法1,2然后让方法3实现一个不同于a的功能

那就可以在b中写一个和方法3同名的代码,这就是重写

示例:

注意点:方法签名必须一致、不能重写静态方法或类方法

四、多态

多态是面向对象编程中的一个重要特性,指的是同一操作作用于不同对象时,可以有不同的表现形式。即,多态允许不同类型的对象对同一消息作出不同的响应。

举个例子:

你有一个遥控器a,然后房间里有电视b、电脑c、播放器d

其中

a是父类,里面有打开开关的代码

b、c、d是子类

现在,不管你是对着电视、电脑还是播放器按这个按钮,它都能工作,但是每个设备对 “打开开关”这个命令的反应都不一样。

这就是多态


格式:

列表名 = [子类1(), 子类2(), 子类3(),……]

除此之外,还有最重要的一点是,多态要结合重写

就是子类的方法名要去覆写父类

例如: 

class a:
    def play(self):
        print(1)
class b(a):
    def play(self):
        return "b"
class c(a):
    def play(self):
        return "c"
class d(a):
    def play(self):
        return "d"

# 创建实例
j = [b(), c(), d()]
# 使用相同的接口调用不同对象的play方法
for i in j:    #遍历列表输出
    print(i.play())

#输出b
#输出c
#输出d

感想观看,以上就是全部内容~~


网站公告

今日签到

点亮在社区的每一天
去签到