Learning-Python【26】:反射及内置方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Learning-Python【26】:反射及内置方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2118字,纯文字阅读大概需要4分钟。
内容图文
反射的概念
可以用字符串的方式去访问对象的属性,调用对象的方法(但是不能去访问方法),Python 中一切皆对象,都可以使用反射。
反射有四种方法:
hasattr:hasattr(object, name)判断一个对象是否有 name 属性或者 name 方法。有就返回 True,没有就返回 False
getattr:获取对象的属性或者方法,如果存在则打印出来。hasattr 和 getattr 配套使用
需要注意的是,如果返回的是对象的方法,返回出来的是对象的内存地址,如果需要运行这个方法,可以在后面添加一对()
setattr:给对象的属性赋值,若属性不存在,先创建后赋值
delattr:删除该对象指定的一个属性
class
Foo():
def
__init__
(self, name, age):
self.name = name
self.age = age
def tell_info(self):
print(‘%s: %s‘ %(self.name, self.age))
obj = Foo("egon", 18)
print(hasattr(obj, "name"))
res1 = getattr(obj, "name")
print(res1)
res2 = getattr(obj, "xxx", None)
print(res2)
setattr(obj, "age", 38)
print(obj.__dict__)
setattr(obj, "gender", "male")
print(obj.__dict__)
delattr(obj, "name")
print(obj.__dict__)
isinstance 和 issubclass
isinstance(obj, cls):检查 obj 是不是 cls 的对象(传两个参数,一个是对象,一个是类)
issubclass(sub, super):检查 sub 是不是 super 的子类(传两个参数,一个是子类,一个是父类)
class
Foo:
pass
class
Son(Foo):
pass
s = Son()
print(isinstance(s, Son)) # 判断s是不是Son的对象print(type(s) is Son)
print(isinstance(s, Foo)) # 判断s是不是Foo的对象 不精准print(type(s) is Foo) # type比较精准print(issubclass(Son, Foo)) # 判断Son是不是Foo的子类print(issubclass(Son, object))
print(issubclass(Foo, object))
print(issubclass(int, object))
内置方法
1、__str__ 和 __repr__: 改变对象的字符串显示
class
Foo:
def
__init__
(self, name):
self.name = name
def__repr__(self):
return‘obj in str‘# 这里只能是return# def __str__(self):# return ‘%s obj in str‘%self.name
f = Foo(‘egon‘)
print(f) # 优先执行__str__里面的内容
# 那么你是不是据地__repr__没用呢?
# print(‘%s‘%f) #执行的是__str__里面的返回值
# print(‘%r‘%f) #执行的是__repr__里面的返回值print(‘==============‘)
print(str(f)) # 当执行str(f)时,会去找__str__这个方法,如果找不到的时候,__repr__这个方法就给替补了print(repr(f))
# 1.当打印一个对象的时候,如果实现了__str__方法,打印__str__中的返回值
# 2.当__str__没有被实现的时候,就会调用__repr__方法
# 3.但是当你用字符串格式化的时候,%s和%r会分别调用__str__和__repr__方法
# 4.不管是在字符串格式化的时候还是在打印对象的时候,__repr__方法都可以作为__str__方法的替补,但反之则不行
# 5.用于友好的表示对象。如果__str__和__repr__方法你只能实现一个: 先实现__repr__
2、__del__:会在对象被删除时自动触发执行,用来在对象被删除前回收系统资源
class Foo: def __del__ (self): print(‘===>‘) obj=Foo() # del objprint(‘其他代码...‘)
原文:https://www.cnblogs.com/qiuxirufeng/p/9850891.html
内容总结
以上是互联网集市为您收集整理的Learning-Python【26】:反射及内置方法全部内容,希望文章能够帮你解决Learning-Python【26】:反射及内置方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。