python中的特殊
一、Python 对象的特殊方法
Python 中的特殊方法(也称为魔术方法)是通过双下划线开头和结尾的方法名来定义的。这些方法通常用于实现特定的运算符重载或内置函数的行为。以下是一些常见的特殊方法及其对应的功能:
| 运算符 | 特殊方法 | 功能描述 |
|---|---|---|
| + | __add__(self, other) |
实现加法操作 |
| - | __sub__(self, other) |
实现减法操作 |
| * | __mul__(self, other) |
实现乘法操作 |
| / | __truediv__(self, other) |
实现除法操作 |
| % | __mod__(self, other) |
实现取余操作 |
| // | __floordiv__(self, other) |
实现整除操作 |
| ** | __pow__(self, other) |
实现幂运算 |
| < | __lt__(self, other) |
实现小于比较 |
| <= | __le__(self, other) |
实现小于等于比较 |
| == | __eq__(self, other) |
实现等于比较 |
| > | __gt__(self, other) |
实现大于比较 |
| >= | __ge__(self, other) |
实现大于等于比较 |
| != | __ne__(self, other) |
实现不等于比较 |
示例代码
a = 20
b = 10
# 加法
print(a + b) # 输出:30
print(a.__add__(b)) # 输出:30
# 减法
print(a - b) # 输出:10
print(a.__sub__(b)) # 输出:10
# 乘法
print(a * b) # 输出:200
print(a.__mul__(b)) # 输出:200
# 除法
print(a / b) # 输出:2.0
print(a.__truediv__(b)) # 输出:2.0
# 取余
print(a % b) # 输出:0
print(a.__mod__(b)) # 输出:0
# 整除
print(a // b) # 输出:2
print(a.__floordiv__(b)) # 输出:2
# 幂运算
print(a ** b) # 输出:10240000000000
print(a.__pow__(b)) # 输出:10240000000000
# 比较
print(f"{a}<{b}吗?", a.__lt__(b)) # 输出:20<10吗? False
print(f"{a}>{b}吗?", a.__gt__(b)) # 输出:20>10吗? True
print(f"{a}<={b}吗?", a.__le__(b)) # 输出:20<=10吗? False
print(f"{a}>={b}吗?", a.__ge__(b)) # 输出:20>=10吗? True
print(f"{a}={b}吗?", a.__eq__(b)) # 输出:20=10吗? False
print(f"{a}!={b}吗?", a.__ne__(b)) # 输出:20!=10吗? True
二、Python 中的特殊属性
特殊属性是 Python 中用于获取对象或类的内部信息的属性。以下是一些常见的特殊属性及其功能:
| 特殊属性 | 功能描述 |
|---|---|
obj.__dict__ |
获取对象的属性字典 |
obj.__class__ |
获取对象所属的类 |
class.__bases__ |
获取类的父类元组 |
class.__base__ |
获取类的第一个父类 |
class.__mro__ |
获取类的层次结构(方法解析顺序) |
class.__subclasses__() |
获取类的直接子类列表 |
示例代码
class A:
pass
class B:
pass
class C(A, B):
def __init__(self, name, age):
self.name = name
self.age = age
# 创建对象
a = A()
b = B()
c = C('Kyle', 20)
# 对象的属性字典
print("对象a的属性字典:", a.__dict__) # 输出:对象a的属性字典: {}
print("对象b的属性字典:", b.__dict__) # 输出:对象b的属性字典: {}
print("对象c的属性字典:", c.__dict__) # 输出:对象c的属性字典: {'name': 'Kyle', 'age': 20}
# 对象所属类
print("对象a所属类:", a.__class__) # 输出:对象a所属类: <class '__main__.A'>
print("对象b所属类:", b.__class__) # 输出:对象b所属类: <class '__main__.B'>
print("对象c所属类:", c.__class__) # 输出:对象c所属类: <class '__main__.C'>
# 类的父类元组
print("A类的父类元组:", A.__bases__) # 输出:A类的父类元组: (<class 'object'>,)
print("B类的父类元组:", B.__bases__) # 输出:B类的父类元组: (<class 'object'>,)
print("C类的父类元组:", C.__bases__) # 输出:C类的父类元组: (<class '__main__.A'>, <class '__main__.B'>)
# 类的第一个父类
print("A类的第一个父类:", A.__base__) # 输出:A类的第一个父类: <class 'object'>
print("B类的第一个父类:", B.__base__) # 输出:B类的第一个父类: <class 'object'>
print("C类的第一个父类:", C.__base__) # 输出:C类的第一个父类: <class '__main__.A'>
# 类的层次结构(方法解析顺序)
print("A类的层次结构:", A.__mro__) # 输出:A类的层次结构: (<class '__main__.A'>, <class 'object'>)
print("B类的层次结构:", B.__mro__) # 输出:B类的层次结构: (<class '__main__.B'>, <class 'object'>)
print("C类的层次结构:", C.__mro__) # 输出:C类的层次结构: (<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
# 类的直接子类列表
print("A类的直接子类列表:", A.__subclasses__()) # 输出:A类的直接子类列表: [<class '__main__.C'>]
print("B类的直接子类列表:", B.__subclasses__()) # 输出:B类的直接子类列表: [<class '__main__.C'>]
print("C类的直接子类列表:", C.__subclasses__()) # 输出:C类的直接子类列表: []
总结
通过以上内容,我们了解了 Python 中对象的特殊方法和特殊属性。特殊方法主要用于实现运算符重载和内置函数的行为,而特殊属性则用于获取对象或类的内部信息。这些特性使得 Python 的面向对象编程更加灵活和强大。

浙公网安备 33010602011771号