来源:python中国网 时间:2020-05-12

  类的双下线方法

  双下划线方法是由双下划线+方法名+双下划线组合成的方法。双下划线方法主要是python源码程序员使用的,一般在开发中不使用,下划线对解释器有特殊的意义。

  双下线方法调用

  双下划綫方法的执行是通过特定的方式触发的,不同的双下方法有不同的触发方式。例如:__init__在实例化对象的时候执行。本文则介绍len方法、hash方法、eq方法、item系列,这几种仅作了解即可。

  1、__len__方法

# -*- coding: utf-8 -*-


class A:

    def __len__(self):
        print('len....')
        return 3


if __name__ == "__main__":
    a = A()
    num = len(a) # len 一个对象就会触发这个对象的 __len__方法。
    print(num)

len....
3


  2、__hash__方法

# -*- coding: utf-8 -*-


class A:

    def __init__(self):
        self.a = 1
        self.b = 2

    def __hash__(self):
        print("hash...")
        return hash(str(self.a)+str(self.b))


if __name__ == "__main__":
    a = A()
    print(hash(a))
hash...
-4588959937206045014



  3、__eq__方法

# -*- coding: utf-8 -*-

class A:

    def __init__(self):
        self.a = 1
        self.b = 2

    def __eq__(self,obj): # 必须有参数
        print("eq.... ")
        if  self.a == obj.a and self.b == obj.b:
            return 'yes'


if __name__ == "__main__":
    a = A()
    b = A()
    print(a == b)
eq.... 
yes


  4、__item__系列

# -*- coding: utf-8 -*-


class Website:
    def __init__(self,name):
        self.name=name

    def __setitem__(self, key, value):
        print("设置一个key:",key)
        self.__dict__[key]=value

    def __getitem__(self, item):
        print("获取key:",item)
        print(self.__dict__[item])


    def __delitem__(self, key):
        print('删除key:')
        self.__dict__.pop(key)


if __name__ == "__main__":
    b = Website('python66')
    b["name"] = "python66教程站" # 设置key
    b["name"]  # 获取key
    b["site"] = "www.python66.com" # 设置key
    b['site'] # 获取key
    del b["site"] # 删除key
    print(b.__dict__)
设置一个key: name
获取key: name
python66教程站
设置一个key: site
获取key: site
www.python66.com
删除key:
{'name': 'python66教程站'}