isinstance(obj,cls)检查obj是否是cls的对象

issubclass(sub,super)检查sub是否是super的派生类

class Bar:
    pass

class Foo(Bar):
    pass

obj =Foo()

print(isinstance(obj,Foo))#True
print(issubclass(Foo,Bar))#True

二、反射

python面向对象中的反射:通过字符串的形式操作对象相关的属性

通过下面四个函数可以实现,适用于类和对象

hasattr(object,name):判断一个object中有没有name属性或者方法

getatrr(object,name,default=None):获取object中的name属性或方法,设置defult=None时没找到返回None,没设置报错

setattr(x,y,z)修改x中y的值为z,当y不存在时添加y的值为z

delattr(x,y)删除x中的y属性或方法

演示代码:

class BlackMedium:
    feature='Ugly'
    def __init__(self,name,addr):
        self.name=name
        self.addr=addr

    def sell_house(self):
        print('%s 黑中介卖房子啦,傻逼才买呢,但是谁能证明自己不傻逼' %self.name)
    def rent_house(self):
        print('%s 黑中介租房子啦,傻逼才租呢' %self.name)

b1=BlackMedium('万成置地','回龙观天露园')

#检测是否含有某属性
print(hasattr(b1,'name'))
print(hasattr(b1,'sell_house'))

#获取属性
n=getattr(b1,'name')
print(n)
func=getattr(b1,'rent_house')
func()

# getattr(b1,'aaaaaaaa') #报错
print(getattr(b1,'aaaaaaaa','不存在啊'))

#设置属性
setattr(b1,'sb',True)
setattr(b1,'show_name',lambda self:self.name+'sb')
print(b1.__dict__)
print(b1.show_name(b1))

#删除属性
delattr(b1,'addr')
delattr(b1,'show_name')
delattr(b1,'show_name111')#不存在,则报错

print(b1.__dict__)

四个方法的使用演示
View Code

相关文章:

  • 2021-12-12
  • 2022-02-10
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-27
  • 2021-06-04
  • 2021-07-06
  • 2021-10-05
  • 2021-12-25
  • 2021-07-25
  • 2021-09-27
相关资源
相似解决方案