通过字符串的形式操作对象的属性
python
class Person(object):
def __init__(self,name,age) -> None:
self.name=name
self.age=age
def walking(self):
print("walking......")
获取对象的属性
python
p=Person("Recardo",12)
# 获取队形的name属性
a=getattr(p,"name")
# Recardo
print(a)
为对象添加static的属性
python
p=Person("Recardo",12)
# 添加static 属性的变量
setattr(p,"yanling","show me the flowers")
# show me the flowers
print(p.yanling)
为对象添加方法
python
p=Person("Recardo",12)
#对实例添加方法
def talking(self):
print(self.name,"is talking")
# 为p对象添加名为speak的方法
setattr(p,"speak",talking)
# Recardo is talking
p.speak(p)
对Student类添加方法
python
p=Person("Recardo",12)
#对实例添加方法
def talking(self):
print(self.name,"is talking")
#对Person类添加方法
setattr(Person,"speak2",talking)
# p对象调用Person类的方法
# Recardo is talking
p.speak2()
删除对象的变量
python
p=Person("Recardo",12)
# 相当于del p.age
delattr(p,"age")
# AttributeError: 'Person' object has no attribute 'age'
print(p.age)
输入对象的方法名,对象执行方法
python
class Person(object):
def __init__(self,name,age) -> None:
self.name=name
self.age=age
def walking(self):
print(self.name," is walking......")
p=Person("Recardo",12)
user_command=input(">>:").strip()
if hasattr(p,user_command):
func=getattr(p,user_command)
func()
"""
>>:walking
Recardo is walking......
"""
__name__属性
python
"""
reflect2.py
magical reflect2
__name__
反射一个.py文件下的字符串的属性
"""
class Person(object):
def __init__(self,name,age) -> None:
self.name=name
self.age=age
def walking(self):
print("walking......")
print("outside the __main__")
print(__name__)
#在被别的模块导入的时候,发挥作用,被导入时,__name__=="xxx.py"中的xxx
#不被导入时,__name__=="__main__"
if __name__=="__main__":
print("inside the __main__")
print(__name__)
"""
outside the __main__
__main__
inside the __main__
__main__
"""
此时,无论是main方法里面还是main方法外面,name__都等于__main
python
import reflect2 as r2
控制台打印:
python
outside the __main__
reflect2
此时,reflect2中的name是reflect2
夸文件反射
python
# reflect4.py
# 导入reflect2.py
import reflect2 as r2
if hasattr(r2,"Person"):
PersonClass=getattr(r2,"Person")
p=PersonClass("ChenLuo",3)
print(p.name)
print(p.age)
p.walking()
"""
运行结果:
outside the __main__
reflect2
ChenLuo
3
walking......
"""