python学习_day28_面向对象进阶
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习_day28_面向对象进阶相关的知识,希望对你有一定的参考价值。
一、内置函数isinstance和issubclass
1、isinstance()
isinstance(obj,cls)检查obj是否是类 cls 的对象,类似type()。
class Foo(object): pass obj = Foo() print(isinstance(obj, Foo)) #输出结果:True print(isinstance(10,int)) #输出结果:True
sinstance() 与 type() 区别:type() 不会认为子类是一种父类类型,不考虑继承关系。sinstance() 会认为子类是一种父类类型,考虑继承关系。
class A: pass class B(A): pass isinstance(A(), A) # returns True type(A()) == A # returns True isinstance(B(), A) # returns True type(B()) == A # returns False
(2)issubclass()
issubclass(sub, super)检查sub类是否是 super 类的派生类/子类
class Foo(object): pass class Bar(Foo): pass print(issubclass(Bar, Foo)) #输出结果:True
二、反射相关
python面向对象中的反射:通过字符串的形式操作对象相关的属性。如下为4个可以实现自省的函数:
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‘)) #输出结果:True print(hasattr(obj,‘say_hi‘)) #输出结果:True #获取属性 n=getattr(obj,‘name‘) print(n) #输出结果:egon func=getattr(obj,‘say_hi‘) func() #输出结果:hi,egon #设置属性 setattr(obj,‘sb‘,True) setattr(obj,‘show_name‘,lambda self:self.name+‘sb‘) print(obj.__dict__) #输出结果:{‘name‘: ‘egon‘, ‘age‘: 73, ‘sb‘: True, ‘show_name‘: <function <lambda> at 0x00000194A8817048>} print(obj.show_name(obj)) #删除属性 delattr(obj,‘age‘) delattr(obj,‘show_name‘) print(obj.__dict__) #输出结果:{‘name‘: ‘egon‘, ‘sb‘: True}
以上是关于python学习_day28_面向对象进阶的主要内容,如果未能解决你的问题,请参考以下文章