python之面向对象高级进阶-反射与内置模块
内置函数模块isinstance和issubaclass
class Foo:
pass
obj=Foo()
print(isinstance(obj,Foo)) #isinstance(obj,Foo)判断是否obj是否是类 Foo 的对象
isinstance(obj,Foo)判断是否obj是否是类 Foo 的对象
class Parent:
pass
class Sub(Parent):
pass
print(issubclass(Sub,Parent))
print(issubclass(Parent,object)) #issubclass(sub, Parent)判断sub类是否是 Parent 类的派生类
issubclass(sub, Parent)判断sub类是否是 Parent 类的派生类
1.什么是反射
通过字符串来操作类或者对象的属性
2.如何用
hasattr
getattr
delattr
class People:
country='China'
def __init__(self,name):
self.name=name
def eat(self):
print('%s is eating' %self.name)
peo1=People('egon')
print(hasattr(peol,‘eat’)) #判断peol里面有没eat字符 返回值:true或false
print(getattr(peol,‘eat’)) #判断对象中有没有eat字符对应的方法或属性,有的话得到属性结果或函数内存地址
print(getattr(peol,'xxxxx',None)) #对象中没有的话,直接报错,可以在后面添加一个返回条件
setattr(peol,'age',18) #peol.age=18 #增加属性
delattr(peol,name) #del peol.name #删除属性
例:
class Ftp:
def __init__(self,ip,port):
self.ip=ip
self.port=port
def get(self):
print('GET function')
def put(self):
print('PUT function')
def run (self):
while True:
method=getattr(self,choice,None) #判断对象中有没对应发方法或属性,是函数属性是话返回的函数内存地址
if method is None:
print('输入的命令不存在‘)
else:
method()
con=Ftp(‘1.1.1.1’,23)
con.run