本文和大家分享的主要是python
中有关
反射和类的特殊成员方法,一起来看看吧,希望对大家
学习python有所帮助。
反射
反射即想到4
个内置函数分别为
:getattr
、
hasattr
、
setattr
、
delattr
获取成员、检查成员、设置成员、删除成员
class
Dog(object):
def
__init__(self,name):
self.name = name
def
eat(self):
print("%s is eating..."%self.name)
def
run():
print("runing ....")
d = Dog("lucy")
choise=input("
请输入要调用的方法:
")
if hasattr(d,choise):#
判断一个对象是否有对应的字符串方法
func=getattr(d,choise)#
根据字符串去获取对象里相应的方法或属性的内存地址对象
func()
else:
setattr(d,choise,run)#setattr
(
obj
,
y
,
fun
)相当于
obj.y=fun
,
fun
可以是属性或者方法
v=getattr(d,choise)
print(v)
dir([obj]):
调用这个方法将返回包含obj
大多数属性名的列表(会有一些特殊的属性不包含在内)。
obj
的默认值是当前的模块对象。
hasattr(obj, attr):
这个方法用于检查obj
是否有一个名为
attr
的值的属性,返回一个布尔值。
getattr(obj, attr):
调用这个方法将返回obj
中名为
attr
值的属性的值,例如如果
attr
为
'bar'
,则返回
obj.bar
。
setattr(obj, attr, val):
调用这个方法将给obj
的名为
attr
的值的属性赋值为
val
。例如如果
attr
为
'bar'
,则相当于
obj.bar = val
。
__doc__
查看尖的描述信息
__module__
表示当前操作的对象所在的模块
__class__
表示当前操作的对象所属的类
__init__
构造方法 通过类创建对象自动执行
__del__
析构方法
,
当前对象在内存中被释放自动斩妖执行
__call__
对象后面加括号触发执行
__dict__
查看类或对象中的成员
__str__
如果一个类中定义了此方法
,
那么打印此类对象时
,
输出此方法的返回值
__getitem__
当类中定义了一个字典的属性成员
,
可以获取
__setitem__
设置修改类中字典的数据
__delitem__
删除 类中字典的数据
__metalass__
其用来表示该类由 谁 来实例化创建
__new__
触发
__init__
创建实例
from lib.ss
import a#
示例类
dog
class
doges(object):
"""
类的描述信息
"""
def
__init__(self,name,food):
self.name=name
self.food=food
self.data={}#
定义一个类的字典
def
__call__(self, *args, **kwargs):#
对象后面加括号解执行
print(*args)
def
__str__(self):#
默认输出返回值
return self.name
def
__getitem__(self):#
可以获取类的的字典
return self.data
def
__setitem__(self, key, value):#
可以设置类的的字典
self.data[key]=value
def
__delitem__(self, key):#
可以删除类的字典的内容
del self.data[key]
dog=doges('xxx','iii')
print(dog.__doc__)
b=a()
print(b.__module__)#
操作的对象的那个模块
print(dog.__class__)#
当前操作的对象的类是什么
dog('111')#
print(doges.__dict__)#
查看类或对象的成员
类只打印类的成员不打印对象的成员
print(dog.__dict__)#
查看类或对象的成员 对象只打印对象的成员不打印类的成员
print(dog)#
打印
__str__
的返回值
print(dog.__str__())#
打印返回值
dog['1']=1000#
触发
.__setitem__()
dog['2']=1000#
触发
.__setitem__()
print(dog.__getitem__())
print(dog.__delitem__('1'))#
删除类中字典
print(dog.__getitem__())
#
设置类的特殊方法
def
func(self):
print('hello word%s'%self.name)
print()
def
__init__(self,name,age):
self.name=name
self.age=age##type
参数
1:
类名
2.
类的基类
3.
类的成员
,
字典格式
CAT=type('CAT',(object,),{'func':func,'__init__':__init__})
cat=CAT('
喵喵
',3)
cat.func()
print(cat.name,cat.age)
来源:
博客园