python初学,常用魔术方法以及实例(Java 思维下的类比,内容java友好)

🧩 整合示例:一个自定义的 MyList 类(像列表一样的类)

python复制编辑class MyList:
    def __init__(self, data):
        # 构造方法
        self.data = data
        print("__init__ 被调用:初始化完成")

    def __len__(self):
        # 返回长度
        return len(self.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]

    def __iter__(self):
        # 返回可迭代对象(比如 for 循环)
        print("__iter__ 被调用")
        return iter(self.data)

    def __next__(self):
        # (不常用,除非自己实现 iterator)这里不演示

        # 运算符重载部分
    def __add__(self, other):
        # 加法重载
        return MyList(self.data + other.data)

    def __eq__(self, other):
        # 比较是否相等
        return self.data == other.data

    def __str__(self):
        # 字符串显示,用于 print()
        return f"MyList: {self.data}"

    def __repr__(self):
        # 调试时的显示
        return f"MyList({self.data})"

    def __del__(self):
        # 析构函数(对象销毁时调用)
        print("__del__ 被调用,对象被销毁")

    # 普通方法
    def append(self, value):
        self.data.append(value)

✅ 使用示例:逐个触发魔术方法

python复制编辑a = MyList([1, 2, 3])          # __init__
b = MyList([4, 5])

print(len(a))                  # __len__ → 输出: 3

print(a[1])                    # __getitem__ → 输出: 2
a[1] = 20                      # __setitem__
del a[2]                      # __delitem__

for i in a:                   # __iter__
    print(i)                  # 输出: 1, 20

print(a + b)                  # __add__ → 合并为新列表 [1, 20, 4, 5]
print(a == b)                 # __eq__ → 比较两个列表是否相等
print(str(a))                 # __str__
print(repr(a))                # __repr__

a.append(99)                  # 普通方法调用 append()

📘 Java 思维下的类比

Python 魔术方法Java 类似操作示例
__init__构造方法new MyList(...)
__len__.size()list.size()
__getitem__.get(index)list.get(1)
__setitem__.set(index, value)list.set(1, 20)
__delitem__.remove(index)list.remove(2)
__iter__Iterable 接口for (int x : list)
__add__自定义类重载加法(Java 不支持)listA + listB 不支持
__eq__.equals()listA.equals(listB)
__str__.toString()System.out.println(obj)
__repr__toString() for 调试IDE 输出对象信息
__del__析构函数(不建议在 Java 用)Java 用 finalize()

🔚 总结图(最常用的魔术方法一览)

分类魔术方法用途/触发方式
初始化__init__创建对象时自动调用
销毁__del__对象销毁时自动调用
长度相关__len__len(obj)
下标访问__getitem__obj[i]
下标赋值__setitem__obj[i] = val
删除元素__delitem__del obj[i]
可迭代__iter__for x in obj
运算符重载__add__obj1 + obj2
比较__eq__obj1 == obj2
字符串表示__str__print(obj)
调试表示__repr__obj 在控制台输出时使用
普通方法任意 def直接调用:obj.method()

你可以把这个类理解为:

Java 中一个实现了 List 接口、重写了 toString()equals()size()get()set()iterator() 的自定义类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值