设计模式

设计模式一共有23种

单例模式 一个类始终只有一个实例

原则是 有着覆盖,没有的属性就添加或者是保留下去

当你第一次实例化这个类的时候就创建一个实例化对象

当你之后再来实例化的时候就会用原来的创建的对象,如果后面你有定制了一个那么就会覆盖 之间没有属性就添加进去

class A:
    __instance = False
    def __init__(self,name,age):
        self.name = name
        self.age = age
        def __new__(cls, *args, **kwargs):
            if cls.__instance:
                return cls.__instance
            cls.__instance = object.__new__(cls)
            return cls.__instance
a = A('gao',23)
a.sex = ''
b = A('JIAN',22)
b.hobby = '打飞机'
print(b.__dict__)
print(a.__dict__)

__eq__

class A:
    def __init__(self,name):
        self.name = name
    def __eq__(self, other):
        if self.name == other.name:
            return True
        else:
            return True   #通过人为的改变返回值  可以让控制==的返回值
a = A('gao')
b = A('jian')
print(a is b)

__hash__  set去重依赖于__hash__ __eq__ 方法

class A:  #hash可以定制的好处是人为控制hash值是否相等,比如名字和性别相等就相当于一个人,去重功能 但是hash 里面的只能为字符串
    def __init__(self,name,sex,ago):
        self.name = name
        self.sex = sex
        self.ago = ago
    def __hash__(self):
        return hash(self.name+self.sex)
    def __eq__(self, other):
        if self.name == other.name and self.sex == other.sex:
            return True
p_lst = []
for i in range(84):
    p_lst.append(A('egon','male',i))
print(p_lst)
print(set(p_lst))
原文地址:https://www.cnblogs.com/Ebola-/p/8336541.html