翼度科技»论坛 编程开发 python 查看内容

类相关函数(反射机制)

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
6.5 类相关函数(反射机制)

在 Python 中使用反射可以得到对象的属性,即:反过来让对象告诉我们他的相关信息是什么,用于实现在运行时获取对象的相关信息。
Python中有几个内置方法,可以用来检查或是访问对象的属性。这些方法可以用于任意对象。
6.5.1 dir([obj])

描述
不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。
示例:
>>> dir(input)
['call', 'class', 'delattr', 'dir', 'doc', 'eq', 'format', 'ge', 'getattribute', 'gt', 'hash', 'init', 'init_subclass', 'le', 'lt', 'module', 'name', 'ne', 'new', 'qualname', 'reduce', 'reduce_ex', 'repr', 'self', 'setattr', 'sizeof', 'str', 'subclasshook', 'text_signature']
6.5.2 hasattr(obj, name)、getattr(obj, name):

描述
这2个函数的实参都是一个对象和一个字符串。如果字符串是对象的属性之一的名称,则返回 True(获取),否则返回 False(报错)。
示例:
  1. class Person:
  2.     age = 18
  3.     def __init__(self):
  4.         self.name = '张三'
  5. zs = Person()
  6. print(hasattr(zs, 'name'))
  7. print(hasattr(zs, 'age'))
  8. print(hasattr(zs, 'gender'))
  9. print(getattr(zs, 'name'))
  10. print(getattr(zs, 'age'))
  11. print(getattr(zs, 'gender'))
复制代码
True
True
False
张三
18
Traceback (most recent call last):
File "E:\BaiduNetdiskWorkspace\FrbPythonFiles\study\面向对象\属性.py", line 15, in
print(getattr(zs, 'gender'))
AttributeError: 'Person' object has no attribute 'gender'
6.5.3 setattr(obj, name, val):

描述
本函数与 getattr() 相对应。其参数为一个对象、一个字符串和一个任意值。字符串可以为某现有属性的名称,或为新属性。只要对象允许,函数会将值赋给属性。如 setattr(x, 'foobar', 123) 等价于 x.foobar = 123。
注解:由于私有名称混合发生在编译时,因此必须手动混合私有属性(以两个下划线打头的属性)名称以便使用 setattr() 来设置它。
示例:
  1. class Person:
  2.     age = 18
  3.     def __init__(self):
  4.         self.name = '张三'
  5.         self.__gender = '男'
  6. zs = Person()
  7. setattr(zs, 'name', '李四')
  8. setattr(zs, '__gender', '女')
  9. print(zs.name)
  10. print(zs._Person__gender)
  11. setattr(zs, '_Person__gender', '女')
  12. print(zs._Person__gender)
复制代码
李四


6.5.4 delattr(obj, name)

描述
delattr函数实参是一个对象和一个字符串。该字符串必须是对象的某个属性。如果对象允许,该函数将删除指定的属性。例如 delattr(x, 'foobar') 等价于 del x.foobar 。
示例
  1. class Person:
  2.     age = 18
  3.     def __init__(self):
  4.         self.name = '张三'
  5.         self.__gender = '男'
  6. zs = Person()
  7. print(hasattr(zs, 'name'))
  8. delattr(zs, 'name')
  9. print(hasattr(zs, 'name'))
复制代码
True
False
6.5.5 type(obj)

描述
type函数用来返回指定对象的类型。
示例
  1. class Person:
  2.     def __init__(self):
  3.         self.name = '张三'
  4. zs = Person()
  5. print(type(1))
  6. print(type(zs))
  7. print(type(Person))
复制代码




来源:https://www.cnblogs.com/sibide/p/17174394.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具