大锤python日记(对象内置方法)

90 阅读3分钟

Python中对象的内置方法的分类及简要说明:

  1. 数值运算方法:
  • __add__:加法运算符 "+"
  • __sub__:减法运算符 "-"
  • __mul__:乘法运算符 "*"
  • __truediv__:除法运算符 "/"
  • __floordiv__:整除运算符 "//"
  • __mod__:取模运算符 "%"
  • __pow__:幂运算符 "**"
  1. 比较方法:
  • __eq__:等于运算符 "=="
  • __ne__:不等于运算符 "!="
  • __lt__:小于运算符 "<"
  • __le__:小于等于运算符 "<="
  • __gt__:大于运算符 ">"
  • __ge__:大于等于运算符 ">="
  1. 序列方法:
  • __len__:返回序列长度
  • __getitem__:获取指定位置的元素
  • __setitem__:设置指定位置的元素
  • __delitem__:删除指定位置的元素
  • __contains__:检查序列是否包含指定元素
  1. 映射方法:
  • __getitem__:获取指定键的值
  • __setitem__:设置指定键的值
  • __delitem__:删除指定键的值
  1. 迭代方法:
  • __iter__:返回迭代器对象
  • __next__:返回下一个元素
  1. 字符串表示方法:
  • __str__:返回对象的字符串表示形式
  • __repr__:返回对象的可打印字符串表示形式
  1. 其他常用方法:
  • __init__:初始化对象
  • __call__:使对象能够像函数一样调用
  • __getattr__:访问不存在的属性时触发
  • __setattr__:设置属性时触发
  • __delattr__:删除属性时触发

例子如下:

  1. 数值运算方法:
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)
  1. 比较方法:
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
  1. 序列方法:
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
  1. 映射方法:
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'}
  1. 迭代方法:
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
  1. 字符串表示方法:
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)
  1. 其他常用方法:
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'}

以上是一些内置方法的例子,希望能对您有所帮助。