isinstance和issubclass
isinstance(obj,cls)检查是否obj是否是类 cls 的对象
class Foo: passclass Son(Foo): passs=Son()print(isinstance(s,Son))
issubclass(sub, super)检查sub类是否是 super 类的派生类
class Foo(object): pass class Bar(Foo): pass issubclass(Bar, Foo)
反射
python面向对象中的反射:通过字符串的形式操作对象相关的属性,python中一切事物都是对象(都可以用反射)
下列方法适用于类和对象:
检查是否含有某属性---hasattr 返回布尔值 获取属性---getattr 没有就会报错 设置属性---setattr 删除属性---delattr
class Foo: f = '类的静态变量' def __init__(self,name,age): self.name=name self.age=age def say_hi(self): print('hi,%s'%self.name)obj=Foo('egon',73)#检测是否含有某属性print(hasattr(obj,'name'))print(hasattr(obj,'say_hi'))#获取属性n=getattr(obj,'name')print(n)func=getattr(obj,'say_hi')func()print(getattr(obj,'aaaaaaaa','不存在啊')) #报错#设置属性setattr(obj,'sb',True)setattr(obj,'show_name',lambda self:self.name+'sb')print(obj.__dict__)print(obj.show_name(obj))#删除属性delattr(obj,'age')delattr(obj,'show_name')delattr(obj,'show_name111')#不存在,则报错print(obj.__dict__)
class Foo(object): staticField = "old boy" def __init__(self): self.name = 'agg' def func(self): return 'func' @staticmethod def bar(): return 'bar' print getattr(Foo, 'staticField')print getattr(Foo, 'func')print getattr(Foo, 'bar')
导入其他模块
import my_moduledef demo1(): print('demo1')print(hasattr(demo1,'demo1'))
def demo1(): print('demo1')import sysmodule_obj=sys.modules[__name__]print(hasattr(module_obj,'demo1'))getattr(module_obj,'demo1')
__del__
class Foo: def __del__(self): print('fgs')f=Foo()print(123)print(123)del fprint(123)print(123)print(123)
item系列
__getitem__\__setitem__\__delitem__
class Foo: def __init__(self,name): self.name=name def __getitem__(self, item): print(self.__dict__[item]) def __setitem__(self, key, value): 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)f1=Foo('sb')f1['age']=18f1['age1']=19del f1.age1del f1['age']f1['name']='alex'print(f1.__dict__)
__new__
class A: def __init__(self): #有一个方法在帮你创造self print('in init function') self.x=1 def __new__(cls, *args, **kwargs): print('in init funct') return object.__new__(A,*args,**kwargs)a=A()
单例模式
class Singleton: def __new__(cls, *args, **kw): if not hasattr(cls, '_instance'): orig = super(Singleton, cls) cls._instance = orig.__new__(cls, *args, **kw) return cls._instanceone = Singleton()two = Singleton()two.a = 3print(one.a)# 3# one和two完全相同,可以用id(), ==, is检测print(id(one))# 29097904print(id(two))# 29097904print(one == two)# Trueprint(one is two)
class Foo: def __init__(self): pass def __call__(self, *args, **kwargs): print('__call__')obj = Foo() # 执行 __init__obj() # 执行 __call__
class A: def __init__(self): self.a = 1 self.b = 2 def __len__(self): return len(self.__dict__)a = A()print(len(a))
class A: def __init__(self): self.a = 1 self.b = 2 def __hash__(self): return hash(str(self.a)+str(self.b))a = A()print(hash(a))
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 Truea = A()b = A()print(a == b)
class Person: def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex def __hash__(self): return hash(self.name+self.sex) def __eq__(self, other): if self.name == other.name and self.sex == other.sex:return Truep_lst = []for i in range(84): p_lst.append(Person('egon',i,'male'))print(p_lst)print(set(p_lst))
---恢复内容结束---
isinstance和issubclass
isinstance(obj,cls)检查是否obj是否是类 cls 的对象
class Foo: passclass Son(Foo): passs=Son()print(isinstance(s,Son))
issubclass(sub, super)检查sub类是否是 super 类的派生类
class Foo(object): pass class Bar(Foo): pass issubclass(Bar, Foo)
反射
python面向对象中的反射:通过字符串的形式操作对象相关的属性,python中一切事物都是对象(都可以用反射)
下列方法适用于类和对象:
检查是否含有某属性---hasattr 返回布尔值 获取属性---getattr 没有就会报错 设置属性---setattr 删除属性---delattr
class Foo: f = '类的静态变量' def __init__(self,name,age): self.name=name self.age=age def say_hi(self): print('hi,%s'%self.name)obj=Foo('egon',73)#检测是否含有某属性print(hasattr(obj,'name'))print(hasattr(obj,'say_hi'))#获取属性n=getattr(obj,'name')print(n)func=getattr(obj,'say_hi')func()print(getattr(obj,'aaaaaaaa','不存在啊')) #报错#设置属性setattr(obj,'sb',True)setattr(obj,'show_name',lambda self:self.name+'sb')print(obj.__dict__)print(obj.show_name(obj))#删除属性delattr(obj,'age')delattr(obj,'show_name')delattr(obj,'show_name111')#不存在,则报错print(obj.__dict__)
class Foo(object): staticField = "old boy" def __init__(self): self.name = 'agg' def func(self): return 'func' @staticmethod def bar(): return 'bar' print getattr(Foo, 'staticField')print getattr(Foo, 'func')print getattr(Foo, 'bar')
导入其他模块
import my_moduledef demo1(): print('demo1')print(hasattr(demo1,'demo1'))
def demo1(): print('demo1')import sysmodule_obj=sys.modules[__name__]print(hasattr(module_obj,'demo1'))getattr(module_obj,'demo1')
__del__
class Foo: def __del__(self): print('fgs')f=Foo()print(123)print(123)del fprint(123)print(123)print(123)
item系列
__getitem__\__setitem__\__delitem__
class Foo: def __init__(self,name): self.name=name def __getitem__(self, item): print(self.__dict__[item]) def __setitem__(self, key, value): 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)f1=Foo('sb')f1['age']=18f1['age1']=19del f1.age1del f1['age']f1['name']='alex'print(f1.__dict__)
__new__
class A: def __init__(self): #有一个方法在帮你创造self print('in init function') self.x=1 def __new__(cls, *args, **kwargs): print('in init funct') return object.__new__(A,*args,**kwargs)a=A()
单例模式
class Singleton: def __new__(cls, *args, **kw): if not hasattr(cls, '_instance'): orig = super(Singleton, cls) cls._instance = orig.__new__(cls, *args, **kw) return cls._instanceone = Singleton()two = Singleton()two.a = 3print(one.a)# 3# one和two完全相同,可以用id(), ==, is检测print(id(one))# 29097904print(id(two))# 29097904print(one == two)# Trueprint(one is two)
class Foo: def __init__(self): pass def __call__(self, *args, **kwargs): print('__call__')obj = Foo() # 执行 __init__obj() # 执行 __call__
class A: def __init__(self): self.a = 1 self.b = 2 def __len__(self): return len(self.__dict__)a = A()print(len(a))
class A: def __init__(self): self.a = 1 self.b = 2 def __hash__(self): return hash(str(self.a)+str(self.b))a = A()print(hash(a))
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 Truea = A()b = A()print(a == b)
class Person: def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex def __hash__(self): return hash(self.name+self.sex) def __eq__(self, other): if self.name == other.name and self.sex == other.sex:return Truep_lst = []for i in range(84): p_lst.append(Person('egon',i,'male'))print(p_lst)print(set(p_lst))
---恢复内容开始---
isinstance和issubclass
isinstance(obj,cls)检查是否obj是否是类 cls 的对象
class Foo: passclass Son(Foo): passs=Son()print(isinstance(s,Son))
issubclass(sub, super)检查sub类是否是 super 类的派生类
class Foo(object): pass class Bar(Foo): pass issubclass(Bar, Foo)
反射
python面向对象中的反射:通过字符串的形式操作对象相关的属性,python中一切事物都是对象(都可以用反射)
下列方法适用于类和对象:
检查是否含有某属性---hasattr 返回布尔值 获取属性---getattr 没有就会报错 设置属性---setattr 删除属性---delattr
class Foo: f = '类的静态变量' def __init__(self,name,age): self.name=name self.age=age def say_hi(self): print('hi,%s'%self.name)obj=Foo('egon',73)#检测是否含有某属性print(hasattr(obj,'name'))print(hasattr(obj,'say_hi'))#获取属性n=getattr(obj,'name')print(n)func=getattr(obj,'say_hi')func()print(getattr(obj,'aaaaaaaa','不存在啊')) #报错#设置属性setattr(obj,'sb',True)setattr(obj,'show_name',lambda self:self.name+'sb')print(obj.__dict__)print(obj.show_name(obj))#删除属性delattr(obj,'age')delattr(obj,'show_name')delattr(obj,'show_name111')#不存在,则报错print(obj.__dict__)
class Foo(object): staticField = "old boy" def __init__(self): self.name = 'agg' def func(self): return 'func' @staticmethod def bar(): return 'bar' print getattr(Foo, 'staticField')print getattr(Foo, 'func')print getattr(Foo, 'bar')
导入其他模块
import my_moduledef demo1(): print('demo1')print(hasattr(demo1,'demo1'))
def demo1(): print('demo1')import sysmodule_obj=sys.modules[__name__]print(hasattr(module_obj,'demo1'))getattr(module_obj,'demo1')
__del__
class Foo: def __del__(self): print('fgs')f=Foo()print(123)print(123)del fprint(123)print(123)print(123)
item系列
__getitem__\__setitem__\__delitem__
class Foo: def __init__(self,name): self.name=name def __getitem__(self, item): print(self.__dict__[item]) def __setitem__(self, key, value): 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)f1=Foo('sb')f1['age']=18f1['age1']=19del f1.age1del f1['age']f1['name']='alex'print(f1.__dict__)
__new__
class A: def __init__(self): #有一个方法在帮你创造self print('in init function') self.x=1 def __new__(cls, *args, **kwargs): print('in init funct') return object.__new__(A,*args,**kwargs)a=A()
单例模式
class Singleton: def __new__(cls, *args, **kw): if not hasattr(cls, '_instance'): orig = super(Singleton, cls) cls._instance = orig.__new__(cls, *args, **kw) return cls._instanceone = Singleton()two = Singleton()two.a = 3print(one.a)# 3# one和two完全相同,可以用id(), ==, is检测print(id(one))# 29097904print(id(two))# 29097904print(one == two)# Trueprint(one is two)
class Foo: def __init__(self): pass def __call__(self, *args, **kwargs): print('__call__')obj = Foo() # 执行 __init__obj() # 执行 __call__
class A: def __init__(self): self.a = 1 self.b = 2 def __len__(self): return len(self.__dict__)a = A()print(len(a))
class A: def __init__(self): self.a = 1 self.b = 2 def __hash__(self): return hash(str(self.a)+str(self.b))a = A()print(hash(a))
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 Truea = A()b = A()print(a == b)
class Person: def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex def __hash__(self): return hash(self.name+self.sex) def __eq__(self, other): if self.name == other.name and self.sex == other.sex:return Truep_lst = []for i in range(84): p_lst.append(Person('egon',i,'male'))print(p_lst)print(set(p_lst))
---恢复内容结束---
isinstance和issubclass
isinstance(obj,cls)检查是否obj是否是类 cls 的对象
class Foo: passclass Son(Foo): passs=Son()print(isinstance(s,Son))
issubclass(sub, super)检查sub类是否是 super 类的派生类
class Foo(object): pass class Bar(Foo): pass issubclass(Bar, Foo)
反射
python面向对象中的反射:通过字符串的形式操作对象相关的属性,python中一切事物都是对象(都可以用反射)
下列方法适用于类和对象:
检查是否含有某属性---hasattr 返回布尔值 获取属性---getattr 没有就会报错 设置属性---setattr 删除属性---delattr
class Foo: f = '类的静态变量' def __init__(self,name,age): self.name=name self.age=age def say_hi(self): print('hi,%s'%self.name)obj=Foo('egon',73)#检测是否含有某属性print(hasattr(obj,'name'))print(hasattr(obj,'say_hi'))#获取属性n=getattr(obj,'name')print(n)func=getattr(obj,'say_hi')func()print(getattr(obj,'aaaaaaaa','不存在啊')) #报错#设置属性setattr(obj,'sb',True)setattr(obj,'show_name',lambda self:self.name+'sb')print(obj.__dict__)print(obj.show_name(obj))#删除属性delattr(obj,'age')delattr(obj,'show_name')delattr(obj,'show_name111')#不存在,则报错print(obj.__dict__)
class Foo(object): staticField = "old boy" def __init__(self): self.name = 'agg' def func(self): return 'func' @staticmethod def bar(): return 'bar' print getattr(Foo, 'staticField')print getattr(Foo, 'func')print getattr(Foo, 'bar')
导入其他模块
import my_moduledef demo1(): print('demo1')print(hasattr(demo1,'demo1'))
def demo1(): print('demo1')import sysmodule_obj=sys.modules[__name__]print(hasattr(module_obj,'demo1'))getattr(module_obj,'demo1')
__del__
class Foo: def __del__(self): print('fgs')f=Foo()print(123)print(123)del fprint(123)print(123)print(123)
item系列
__getitem__\__setitem__\__delitem__
class Foo: def __init__(self,name): self.name=name def __getitem__(self, item): print(self.__dict__[item]) def __setitem__(self, key, value): 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)f1=Foo('sb')f1['age']=18f1['age1']=19del f1.age1del f1['age']f1['name']='alex'print(f1.__dict__)
__new__
class A: def __init__(self): #有一个方法在帮你创造self print('in init function') self.x=1 def __new__(cls, *args, **kwargs): print('in init funct') return object.__new__(A,*args,**kwargs)a=A()
单例模式
class Singleton: def __new__(cls, *args, **kw): if not hasattr(cls, '_instance'): orig = super(Singleton, cls) cls._instance = orig.__new__(cls, *args, **kw) return cls._instanceone = Singleton()two = Singleton()two.a = 3print(one.a)# 3# one和two完全相同,可以用id(), ==, is检测print(id(one))# 29097904print(id(two))# 29097904print(one == two)# Trueprint(one is two)
class Foo: def __init__(self): pass def __call__(self, *args, **kwargs): print('__call__')obj = Foo() # 执行 __init__obj() # 执行 __call__
class A: def __init__(self): self.a = 1 self.b = 2 def __len__(self): return len(self.__dict__)a = A()print(len(a))
class A: def __init__(self): self.a = 1 self.b = 2 def __hash__(self): return hash(str(self.a)+str(self.b))a = A()print(hash(a))
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 Truea = A()b = A()print(a == b)
class Person: def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex def __hash__(self): return hash(self.name+self.sex) def __eq__(self, other): if self.name == other.name and self.sex == other.sex:return Truep_lst = []for i in range(84): p_lst.append(Person('egon',i,'male'))print(p_lst)print(set(p_lst))