Python中对象的内置方法的分类及简要说明:
- 数值运算方法:
__add__:加法运算符 "+"__sub__:减法运算符 "-"__mul__:乘法运算符 "*"__truediv__:除法运算符 "/"__floordiv__:整除运算符 "//"__mod__:取模运算符 "%"__pow__:幂运算符 "**"
- 比较方法:
__eq__:等于运算符 "=="__ne__:不等于运算符 "!="__lt__:小于运算符 "<"__le__:小于等于运算符 "<="__gt__:大于运算符 ">"__ge__:大于等于运算符 ">="
- 序列方法:
__len__:返回序列长度__getitem__:获取指定位置的元素__setitem__:设置指定位置的元素__delitem__:删除指定位置的元素__contains__:检查序列是否包含指定元素
- 映射方法:
__getitem__:获取指定键的值__setitem__:设置指定键的值__delitem__:删除指定键的值
- 迭代方法:
__iter__:返回迭代器对象__next__:返回下一个元素
- 字符串表示方法:
__str__:返回对象的字符串表示形式__repr__:返回对象的可打印字符串表示形式
- 其他常用方法:
__init__:初始化对象__call__:使对象能够像函数一样调用__getattr__:访问不存在的属性时触发__setattr__:设置属性时触发__delattr__:删除属性时触发
例子如下:
- 数值运算方法:
class Number:
def __init__(self, value):
self.value = value
def __add__(self, other):
return Number(self.value + other.value)
def __sub__(self, other):
return Number(self.value - other.value)
def __mul__(self, other):
return Number(self.value * other.value)
def __truediv__(self, other):
return Number(self.value / other.value)
def __floordiv__(self, other):
return Number(self.value // other.value)
def __mod__(self, other):
return Number(self.value % other.value)
def __pow__(self, other):
return Number(self.value ** other.value)
n1 = Number(10)
n2 = Number(5)
print(n1 + n2) # 输出:Number(15)
print(n1 - n2) # 输出:Number(5)
print(n1 * n2) # 输出:Number(50)
print(n1 / n2) # 输出:Number(2.0)
print(n1 // n2) # 输出:Number(2)
print(n1 % n2) # 输出:Number(0)
print(n1 ** n2) # 输出:Number(100000)
- 比较方法:
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
def __eq__(self, other):
return self.area() == other.area()
def __ne__(self, other):
return self.area() != other.area()
def __lt__(self, other):
return self.area() < other.area()
def __le__(self, other):
return self.area() <= other.area()
def __gt__(self, other):
return self.area() > other.area()
def __ge__(self, other):
return self.area() >= other.area()
r1 = Rectangle(5, 8)
r2 = Rectangle(4, 10)
print(r1 == r2) # 输出:False
print(r1 != r2) # 输出:True
print(r1 < r2) # 输出:False
print(r1 <= r2) # 输出:False
print(r1 > r2) # 输出:True
print(r1 >= r2) # 输出:True
- 序列方法:
class MyList:
def __init__(self, lst):
self.lst = lst
def __len__(self):
return len(self.lst)
def __getitem__(self, index):
return self.lst[index]
def __setitem__(self, index, value):
self.lst[index] = value
def __delitem__(self, index):
del self.lst[index]
def __contains__(self, item):
return item in self.lst
l = MyList([1, 2, 3, 4, 5])
print(len(l)) # 输出:5
print(l[2]) # 输出:3
l[2] = 6
print(l[2]) # 输出:6
del l[1]
print(l.lst) # 输出:[1, 6, 4, 5]
print(3 in l) # 输出:False
print(4 in l) # 输出:True
- 映射方法:
class MyDict:
def __init__(self, dct):
self.dct = dct
def __getitem__(self, key):
return self.dct[key]
def __setitem__(self, key, value):
self.dct[key] = value
def __delitem__(self, key):
del self.dct[key]
d = MyDict({"name": "Tom", "age": 18})
print(d["name"]) # 输出:Tom
d["name"] = "Jerry"
print(d["name"]) # 输出:Jerry
del d["age"]
print(d.dct) # 输出:{'name': 'Jerry'}
- 迭代方法:
class MyRange:
def __init__(self, start, end):
self.start = start
self.end = end
def __iter__(self):
self.current = self.start
return self
def __next__(self):
if self.current >= self.end:
raise StopIteration
else:
result = self.current
self.current += 1
return result
r = MyRange(1, 5)
for i in r:
print(i) # 输出:1 2 3 4
- 字符串表示方法:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"{self.name} is {self.age} years old."
def __repr__(self):
return f"Person('{self.name}', {self.age})"
p = Person("Tom", 18)
print(str(p)) # 输出:Tom is 18 years old.
print(repr(p)) # 输出:Person('Tom', 18)
- 其他常用方法:
class MyClass:
def __init__(self, value):
self.value = value
def __call__(self, x):
return self.value * x
def __getattr__(self, name):
if name == "hello":
return "Hello World"
else:
raise AttributeError(f"'MyClass' object has no attribute '{name}'")
def __setattr__(self, name, value):
if name == "value":
if value < 0:
raise ValueError("value must be non-negative")
else:
self.__dict__["value"] = value
else:
self.__dict__[name] = value
def __delattr__(self, name):
if name == "value":
raise AttributeError("can't delete 'value' attribute")
else:
del self.__dict__[name]
c = MyClass(10)
print(c(5)) # 输出:50
print(c.hello) # 输出:Hello World
c.name = "Tom"
print(c.name) # 输出:Tom
c.age = 18
print(c.age) # 输出:18
c.value = -1 # 抛出ValueError异常
del c.age # 删除age属性
print(c.__dict__) # 输出:{'value': 10, 'name': 'Tom'}
以上是一些内置方法的例子,希望能对您有所帮助。