所学内容
反射
1、hasattr ( 判断一个属性在对象里有没有 ) -------------------- 【对象,字符串属性】本质是:# 判断 ' name ' in obj.__dict__
2、getattr ( 获取对象中字符串的属性 ) --------------------------- 【对象,第三参数,字符串属性】本质是:# 从一个字典 obj.__dict__ [ ' name ' ]
3、setattr ( 一个属性的赋值操作 ( 设置值,修改值 ) )---------【对象,属性,值】setattr 本质是:# obj.__dict__ [ ' FFY ' ]
4、delattr ( 删除属性操作 ) ------------------------------------------ 【删除属性】delattr 本质是:# 通过字符串来操作字典,但不要直接操作字典
内置方法
__str__ :在对象被打印时自动触发,可以用来定义对象被打印的输出信息(注意:必须返回一个字符串类型的值)
__del__ :在对象被删除时先自动触发该方法,可以用来回收对象以外其他相关资源
isinstance与ssubclass
isinstance(对象,类)--------------------- 判断一个对象是否是一个类的实例
issubclass(子类,父类)------------------ 判断一个类是否是另一个类的子类
反射的用法
class Ftp:
def get(self):
print('get') def put(self):
print('put') def login(self):
print('login') def run(self):
while True:
cmd = input('>>>: ').strip() # cmd='get'
if hasattr(self, cmd):
method = getattr(self, cmd)
method()
else:
print('输入的方法不存在') obj = Ftp()
obj.run()
内置的用法
__str__ :在对象被打印时自动触发,可以用来定义对象被打印的输出信息(注意:必须返回一个字符串类型的值)
class People:
def __init__(self, name, age):
self.name = name
self.age = age def __str__(self):
# print('run..........')
return '<name:%s age:%s>' % (self.name, self.age) obj1 = People('egon', 18)
print(obj1) # print(obj1.__str__()) obj2=list([1,2,3])
print(obj2)
__del__ :在对象被删除时先自动触发该方法,可以用来回收对象以外其他相关资源
class Foo:
def __init__(self,x,filepath,encoding='utf-8'):
self.x=x
self.f=open(filepath,'rt',encoding=encoding) def __del__(self):
print('run.....')
# 回收对象关联的其他资源
self.f.close() obj=Foo(1,'a.txt')
# del obj
print('主===========>')
isinstance与issubclass的用法
class Bar:
pass class Foo(Bar):
pass obj = Foo()
print(issubclass(Foo, Bar)) print(isinstance(obj, Foo))