python 中的魔法方法(magic method):常用__getitem__()和__len__()

https://www.cnblogs.com/leesen934/p/9674671.html

1 什么是魔法方法

函数和方法的区别:

(1) 函数:类的外部定义的,形式: def func(*argv):

(2) 方法:class内部定义的函数,分为两种:

1)python 自动产生的方法(魔法方法),可以直接使用这个方法对 实例化的对象 进行操作,比如,len(test1),(假设test1是 内部实现了len方法的类实例化的对象),比较一下,通常使用实例的方法是采用 test1.func() 的形式,这就是魔法方法的特别之处:

函数会在对应的时机被调用: 外部调用这个函数对实例进行作用,实例会自动调用内部的同名函数。在类内部实现魔法方法的定义方法为:def __func__()。但是要注意不是所有加上前后双下划线的方法都是魔法方法,只有部分能够实现[https://www.cnblogs.com/seablog/p/7173107.html]。 (对比一下可调用对象,forward()函数我还没有想明白归到哪里)

2)人为定义的其他方法(函数):和普通函数类似,只不过位于类内部,调用的时候采用 实例名.方法()来调用。

2 下面使用__getitem__()__len__()举例介绍

class test():
    def __init__(self):
        self.x = [1,2,3]
    def __len__(self):
        return self.x[1]
    def __getitem__(self,key):
        return '调用了__getitem__()'
    def __func1__(self):     #在pycharm中通过看颜色就能区别
        return 'hellow'

test1 = test()
print(len(test1))    # 定义当被 len() 调用时的行为(返回容器中元素的个数)
print(test1.__len__())

print(test1.__getitem__(2))
print(test1[2])    # 定义获取容器中指定元素的行为,相当于 self[key]


通过上面例子也可以发现,key为任意值都可以调用__getitem__()方法。

3. repr()方法

image.png

image.png

4. contains

用于判断键是否存在于字典中,如果键在字典dict里返回true,否则返回false, 在基类object中就有这个魔法函数。

[https://www.cnblogs.com/seablog/p/7173107.html]

你可能感兴趣的:(python 中的魔法方法(magic method):常用__getitem__()和__len__())