反射即想到4个内置函数分别为:getattr、hasattr、setattr、delattr 获取成员、检查成员、设置成员、删除成员
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
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__创建实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
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)
|