来源:python中国网 时间:2019-06-06

  类的双下线方法

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

  双下线方法调用

  不同的双下方法有不同的触发方式例如:__init__在实例化对象的时候使用。本文介绍len方法、hash方法、eq方法、item系列,这几种仅作了解即可。

# ‐*‐ coding: utf‐8 ‐*‐

print("  以下是__len__")
class A:

    def __len__(self):
        print(666)
        return 3

a = A()
print(len(a)) # len 一个对象就会触发这个对象的 __len__方法。

class B:

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

    def __len__(self):
        return len(self.__dict__)
b = B()
print(len(b))


print("  以下是__hash__")
class A:

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

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


print("  以下是__eq__")
class A:

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

    def __eq__(self,obj):
        print("call eq method.")
        if  self.a == obj.a and self.b == obj.b:
            return True
a = A()
b = A()
print(a == b)


print("  以下是item系列")
class Brand:

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

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

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

    def __delitem__(self, key):
        print('del obj[key]时,我执行')
        self.__dict__.pop(key)

    def __delattr__(self, item):
        print('del obj.key时,我执行')
        self.__dict__.pop(item)


b=Brand('老王')
b["slogan"] = "老王推车"
b["website"] = "tuiche.com"
del b["website"]
b['name']='老汉'
b["name"]  # 获取KEY
print(b.__dict__)
D:installpython3python.exe D:/pyscript/test/test.py
  以下是__len__
666
3
2
  以下是__hash__
hash method.
-777198268
  以下是__eq__
call eq method.
True
  以下是item系列
设置一个key... slogan
设置一个key... website
del obj[key]时,我执行
设置一个key... name
获取KEY name
老汉
{'name': '老汉', 'slogan': '老王推车'}

Process finished with exit code 0