23 面向对象 -----特殊方法
1. isinstance(obj,类名) 判断对象是否是此类实例化或者此类的子类实例化出来的class A:passclass B(A):passb1=B()print(isinstance(b1,B)) # Trueprint(isinstance(b1,A)) # True2.issubclass(类名,类名1) 判断类名是否是类名1的子类class A:passclass B(A):passprint(issubclass(B,A)) #Trueprint(issubclass(A,B)) #False
3.__len__用法class C: def __init__(self): self.a=1 self.b=2 def __len__(self): return len(self.__dict__)c1=C()print(len(c1))4.__hash__用法class C: def __init__(self): self.a=1 self.b=2 def __hash__(self): return hash(str(self.a)+str(self.b))c1=C()print(hash(c1))5.__str__用法 如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值class B: def __init__(self,name,age): self.name=name self.age=age def __repr__(self): return "太白"b2=B("alex1",1000)print(b2)print("%s"% b2) 6.__repr__用法 如果一个类中定义了__repr__方法,那么在repr(对象) 时,默认输出该方法的返回值class B: def __init__(self,name,age): self.name=name self.age=age def __repr__(self): print("666") return "太白"b1=B("alex",1000)print(repr(b1)) # 方法一print("%r"% b1) # 方法二#补充知识:格式化输出# %s 数字和字符串 %r +"" repr 原形毕露 %d 数字 %f 小数7.__call__用法 构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的, 即:对象() 或者 类()()class Foo: def __init__(self): pass def __call__(self,*args,**kwargs): print(args,kwargs)a1=Foo()a1("alex",a=666) #(‘alex‘,) {‘a‘: 666} 8.__eq__用法 对一个类实例化的两个对象进行比较运算的时候自动触发.class A: def __init__(self,): self.a=1 self.b=2 def __eq__(self,obj): # 需要手动传一个参数 if self.a==obj.a and self.b==obj.b: return Truea1=A()b1=A()print(a1==b1)9.__del__用法 析构方法#python垃圾回收机制:#文件中你创建的所有的变量,类等等,执行过程中将所有变量,类做个标记,执行完之后,在一段时间之内,没有被调用,则会自动回收.class A: def __del__(self): print("666")a1=A()a1.__del__ 10.__new__用法class A: def __init__(self): self.x=1 print("in init function") # 第五步 def __new__(cls,*args,**kwargs): # 第二步 自动执行__new__方法 print(cls) # 第三步<class ‘__main__.A‘> print("in new function") # 第四步 return super().__new__(cls) # 返回一个对象空间 return object.__new__(cls) 第二种方法a1=A() # 第一步 类名加括号11.设计模式:单例模式: 对一个类只能实例化一个对象.最简单的设计模式, (面试必考)class A: __instance=None def __new__(cls, *argsm, **kwargs): if A.__instance is None: obj=object.__new__(cls) A.__instance=obj return A.__instancea1=A()b1=A()c1=A()print(a1,b1,c1)12.item 用法class Foo: def __init__(self,name): self.name=name def __getitem__(self,item): if hasattr(self,item): return getattr(self,item) else: print("没有此变量") def __setitem__(self,key,value): print(key,value) def __delitem__(self,key): print(key) f1=Foo("alex")print(f1["name"])f1["name"]="mary"del f1["name"]
原文地址:https://www.cnblogs.com/J-7-H-2-F-7/p/9265367.html
时间: 2024-10-09 13:18:16