Python类中常见的内置函数

在 Python 中,类可以通过实现一些特殊方法(也称为魔术方法或双下划线方法)来重载内置操作符和函数。这些方法以双下划线开头和结尾,例如 __len____getitem__ 等。它们使得类的实例能够像内置类型那样使用。

 __len__

__len__ 方法定义了当使用 len() 函数时应返回的值。

原理

  • 当你对一个对象调用 len(obj) 时,Python 会调用该对象的 __len__ 方法。
  • 常用于返回对象的长度或大小。

用法

class MyList:
    def __init__(self, data):
        self.data = data

    def __len__(self):
        return len(self.data)

# 示例
my_list = MyList([1, 2, 3, 4, 5])
print(len(my_list))  # 输出 5

__getitem__

__getitem__ 方法定义了当使用索引访问对象元素时应返回的值。

原理

  • 当你使用 obj[key] 访问对象时,Python 会调用该对象的 __getitem__ 方法。
  • 常用于实现序列(如列表)或映射(如字典)的行为。

用法

class MyList:
    def __init__(self, data):
        self.data = data

    def __getitem__(self, index):
        return self.data[index]

# 示例
my_list = MyList([10, 20, 30, 40, 50])
print(my_list[2])  # 输出 30

__setitem__

__setitem__ 方法定义了当使用索引设置对象元素时的行为。

原理

  • 当你使用 obj[key] = value 赋值时,Python 会调用该对象的 __setitem__ 方法。

用法

class MyList:
    def __init__(self, data):
        self.data = data

    def __getitem__(self, index):
        return self.data[index]

    def __setitem__(self, index, value):
        self.data[index] = value

# 示例
my_list = MyList([10, 20, 30, 40, 50])
my_list[2] = 99
print(my_list[2])  # 输出 99

__delitem__

__delitem__ 方法定义了当使用 del 语句删除对象元素时的行为。

原理

  • 当你使用 del obj[key] 删除元素时,Python 会调用该对象的 __delitem__ 方法。

用法

class MyList:
    def __init__(self, data):
        self.data = data

    def __getitem__(self, index):
        return self.data[index]

    def __setitem__(self, index, value):
        self.data[index] = value

    def __delitem__(self, index):
        del self.data[index]

# 示例
my_list = MyList([10, 20, 30, 40, 50])
del my_list[2]
print(my_list.data)  # 输出 [10, 20, 40, 50]

__iter____next__

__iter____next__ 方法定义了对象的迭代行为,使对象可以被迭代器(如 for 循环)使用。

原理

  • __iter__ 方法返回迭代器对象本身。
  • __next__ 方法返回序列的下一个值。如果没有更多的值,则抛出 StopIteration 异常。

用法

class MyList:
    def __init__(self, data):
        self.data = data
        self.index = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.index < len(self.data):
            result = self.data[self.index]
            self.index += 1
            return result
        else:
            raise StopIteration

# 示例
my_list = MyList([10, 20, 30, 40, 50])
for item in my_list:
    print(item)

__repr____str__

__repr____str__ 方法定义了对象的字符串表示。

原理

  • __repr__ 方法返回一个字符串,该字符串应尽可能准确且唯一,以便开发人员理解。它用于 repr() 函数和交互式解释器中。
  • __str__ 方法返回一个字符串,该字符串是对象的可打印表示形式。它用于 str() 函数和 print() 语句中。

用法

class MyList:
    def __init__(self, data):
        self.data = data

    def __repr__(self):
        return f"MyList({self.data})"

    def __str__(self):
        return f"MyList with data: {self.data}"

# 示例
my_list = MyList([10, 20, 30, 40, 50])
print(repr(my_list))  # 输出 MyList([10, 20, 30, 40, 50])
print(my_list)        # 输出 MyList with data: [10, 20, 30, 40, 50]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值