好的。下面就给大家详细地讲一下 Python 常用的魔法方法。
Python 常用的魔法方法
什么是魔法方法?
魔法方法是一种 Python 中特殊的方法,可以在类的实例化、运算符重载、属性调用等环节中进行自定义操作。
在 Python 中,官方定义了一些魔法方法(以双下划线作为前缀和后缀的方法名),如 __init__()
, __add__()
等等,这些方法会在特定的情况下被 Python 自动调用,以完成特定的操作。
魔法方法的分类
魔法方法可以分为以下几类:
- 构造方法:
__init__()
- 魔法方法:
__repr__()
,__str__()
- 运算符重载:
__add__()
,__sub__()
,__mul__()
,__truediv__()
等等 - 属性访问:
__getattr__()
,__setattr__()
,__delattr__()
等等 - 容器类型:
__len__()
,__getitem__()
,__setitem__()
,__delitem__()
,__iter__()
等等
构造方法
构造方法是一种特殊的方法,用于在创建类的实例时,给这个实例初始化一些属性。在 Python 中,构造方法的方法名是 __init__()
。
示例代码如下:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person("张三", 18)
print(person.name) # 张三
print(person.age) # 18
魔法方法
__repr__()
方法
__repr__()
方法用于返回一个对象的字符串表示形式,该字符串表示形式可以用来重新创建该对象。如果我们想要自定义一个对象的字符串表示形式,可以重载该方法。
示例代码如下:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f"{self.name}({self.age})"
person = Person("张三", 18)
print(person) # 张三(18)
__str__()
方法
__str__()
方法用于返回一个对象的字符串表示形式,当我们使用 print
函数打印一个对象时,就是调用的该方法。如果我们想要自定义一个对象的打印形式,可以重载该方法。
示例代码如下:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"{self.name}({self.age})"
person = Person("张三", 18)
print(person) # 张三(18)
运算符重载
Python 中的运算符重载,就是通过魔法方法来自定义对象在特定情况下的运算方式。
__add__()
方法
__add__()
方法用于重载加号运算符 +
,可以让两个对象相加时,返回我们自定义的结果。
示例代码如下:
class Person:
def __init__(self, age):
self.age = age
def __add__(self, other):
return self.age + other.age
person1 = Person(18)
person2 = Person(20)
print(person1 + person2) # 38
__lt__()
和 __gt__()
方法
__lt__()
和 __gt__()
方法分别用于重载小于号运算符 <
和大于号运算符 >
,可以让 Python 对象之间能够进行大小比较。
示例代码如下:
class Person:
def __init__(self, age):
self.age = age
def __lt__(self, other):
return self.age < other.age
def __gt__(self, other):
return self.age > other.age
person1 = Person(18)
person2 = Person(20)
print(person1 < person2) # True
print(person2 > person1) # True
属性访问
在 Python 中,我们可以通过 .
符号来访问对象的属性,但是如果我们想要自定义对象的属性访问方式,可以通过魔法方法来实现。
__getattr__()
方法
当我们访问一个对象的不存在的属性时会触发 __getattr__()
方法。
示例代码如下:
class Person:
def __init__(self, name):
self.name = name
def __getattr__(self, item):
if item == "age":
return 18
else:
return None
person = Person("张三")
print(person.age) # 18
print(person.gender) # None
__setattr__()
方法
当我们给对象设置属性值时会触发 __setattr__()
方法。
示例代码如下:
class Person:
def __setattr__(self, key, value):
print(f"设置属性 {key} 为 {value}")
self.__dict__[key] = value
person = Person()
person.age = 18 # 设置属性 age 为 18
__delattr__()
方法
当我们删除一个对象的属性时会触发 __delattr__()
方法。
示例代码如下:
class Person:
def __init__(self):
self.age = 18
def __delattr__(self, item):
print(f"删除属性 {item}")
del self.__dict__[item]
person = Person()
del person.age # 删除属性 age
容器类型
在 Python 中,像列表、字典等容器类型都有一些常用的魔法方法。
__len__()
方法
__len__()
方法用于返回容器类型对象的长度(即元素的个数)。
示例代码如下:
class MyList:
def __init__(self):
self.items = []
def add(self, item):
self.items.append(item)
def __len__(self):
return len(self.items)
my_list = MyList()
my_list.add(1)
my_list.add(2)
my_list.add(3)
print(len(my_list)) # 3
__getitem__()
和 __setitem__()
方法
__getitem__()
和 __setitem__()
方法分别用于访问和设置容器类型对象中指定下标的元素。
示例代码如下:
class MyList:
def __init__(self):
self.items = []
def add(self, item):
self.items.append(item)
def __getitem__(self, index):
return self.items[index]
def __setitem__(self, index, value):
self.items[index] = value
my_list = MyList()
my_list.add(1)
my_list.add(2)
my_list.add(3)
print(my_list[0]) # 1
my_list[0] = 10
print(my_list[0]) # 10
到此,本文讲解了 Python 常用的魔法方法,希望对大家有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Python常用的魔法方法 - Python技术站