Python基础篇-013. 自定义类(二)
[toc]
一、创作声明
本Python系列课程,是一门初级课程。目标是想让大家能在Python方面,实现从零基础到入门。这个课程的特殊性在于,这将是一门由我来主导教学思路,由ChatGPT来主导教学内容的课程。我认为这将会是一种非常有意思的尝试。
二、前言
本章学习目标:
了解自定义类内部方法是什么
对常见的自定义类内部方法,要学会功能说明,默认实现,什么场景下需要重写,以及怎么重写
三、内部方法示例
当我们使用Python编程时,可以通过自定义类来创建自己的对象类型。下面是一个示例:
在上面的示例中,我们定义了一个名为Car的类。它具有以下内部方法:
__init__(self, brand, model, color)
: 这是一个特殊的方法,用于初始化对象的属性。在这个例子中,我们使用传入的参数来设置车辆的品牌、型号和颜色,并将速度初始化为0。accelerate(self, increment)
: 这个方法用于加速车辆的速度。它接受一个增量参数,并将速度增加相应的值。brake(self, decrement)
: 这个方法用于减速车辆的速度。它接受一个减量参数,并将速度减少相应的值。__str__(self)
: 这个方法用于返回对象的字符串表示。在这个例子中,我们返回一个描述车辆颜色、品牌和型号的字符串。__repr__(self)
: 这个方法用于返回对象的可打印表示。在这个例子中,我们返回一个类似于创建对象的Python代码的字符串。__eq__(self, other)
: 这个方法用于比较两个对象是否相等。在这个例子中,我们比较车辆的品牌、型号和颜色是否相等。__gt__(self, other)
: 这个方法用于比较两个对象的大小关系。在这个例子中,我们比较车辆的速度是否大于另一个车辆的速度。__lt__(self, other)
: 这个方法用于比较两个对象的大小关系。在这个例子中,我们比较车辆的速度是否小于另一个车辆的速度。
这些是自定义类中常用的一些内部方法,它们可以根据实际需求进行自定义和重写。
四、字符串形式
1、功能说明
在Python中,我们可以通过在自定义类中定义__str__
和__repr__
方法来自定义对象的字符串表示形式。
__str__
方法用于返回对象的可读性较好的字符串表示形式,通常用于打印对象或在交互式环境中显示对象。__repr__
方法用于返回对象的官方字符串表示形式,通常用于调试和开发目的。
2、默认实现
如果我们没有在自定义类中定义__str__
和__repr__
方法,Python会使用默认的实现来生成这些字符串表示形式。默认情况下,__str__
方法返回<__main__.ClassName object at 0x...>
,其中ClassName
是类的名称,0x...
是对象在内存中的地址。__repr__
方法返回与__str__
方法相同的字符串。
下面是一个示例,展示了自定义类中__str__
和__repr__
的默认实现:
3、重写场景
如果我们想要自定义对象的字符串表示形式,可以在类中定义__str__
和__repr__
方法,并返回我们想要的字符串。
4、自定义实现案例
通过定义__str__
和__repr__
方法,我们可以根据需要自定义对象的字符串表示形式,使其更加有意义和可读性。
五、比较大小
1、功能说明与默认实现
在Python中,我们可以通过重写类的特殊方法来自定义类的比较操作。以下是一些常用的特殊方法和它们的默认实现:
__eq__(self, other)
:用于实现相等比较操作(==)。默认实现是比较两个对象的内存地址是否相同。__ne__(self, other)
:用于实现不等比较操作(!=)。默认实现是返回not self.__eq__(other)
。__lt__(self, other)
:用于实现小于比较操作(<)。默认实现是引发TypeError
异常。__gt__(self, other)
:用于实现大于比较操作(>)。默认实现是引发TypeError
异常。__le__(self, other)
:用于实现小于等于比较操作(<=)。默认实现是引发TypeError
异常。__ge__(self, other)
:用于实现大于等于比较操作(>=)。默认实现是引发TypeError
异常。
2、重写场景
不是所有的自定义类都需要实现__eq__
、__gt__
和__lt__
方法。这些方法是用于比较对象的,根据具体的需求来决定是否需要实现它们。
__eq__
方法用于判断两个对象是否相等,即==
操作符的行为。如果你希望能够比较两个对象的相等性,就需要实现这个方法。__gt__
方法用于判断一个对象是否大于另一个对象,即>
操作符的行为。如果你希望能够比较两个对象的大小关系,就需要实现这个方法。__lt__
方法用于判断一个对象是否小于另一个对象,即<
操作符的行为。如果你希望能够比较两个对象的大小关系,就需要实现这个方法。
如果你的自定义类不需要进行对象的比较操作,那么就不需要实现这些方法。
3、自定义实现案例
下面是一个自定义类实现比较大小的案例:
在上面的例子中,我们定义了一个Rectangle
类,该类具有width
和height
属性,以及计算面积的area()
方法。我们还重载了<
、>
和==
运算符,使得可以直接比较两个矩形对象的面积大小。
注意,我们使用__lt__
、__gt__
和__eq__
这些特殊方法来实现运算符重载。这些方法会在使用相应运算符进行比较时被调用。
运行上述代码,将会输出rect1的面积大于rect2
,因为rect1
的面积为50,而rect2
的面积为24。
六、写在最后
更多技术分享,点击传送门:https://github.com/maxiaolu66/profile
Last updated