设计模式一共有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))