反射オブジェクト指向プログラミング
反射
定義:することにより、文字列オブジェクトのプロパティとメソッドの操作。
4反射法、組み込まれているのpythonは、があります。
hasattr(OBJ、名前:STR)
「文字列」によってプロパティまたはオブジェクトの有無を判定する方法。ブール戻り値は、Trueがありません、偽の手段を表明しました。
注:クエリーメソッドは、単にメソッドの名前を書くとき、括弧を追加しないでください!!!
class User:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def show_userinfo(self):
print(f"姓名:{self.name},年龄:{self.age},性别:{self.gender}")
# 创建user对象
user = User("haha", 37, "男")
# 查询属性name 是否存在
res = hasattr(user, "name")
print(res) # 输出结果:True
# 查询方法show_userinfo 是否存在。注意:不要加括号!!
res_func = hasattr(user, "show_userinfo")
print(res_func) # 输出结果:True
res_func = hasattr(user, "show_userinfo()")
print(res_func) # 输出结果:False
GETATTR(OBJ、名前:STR、[デフォルト])
「文字列」とは、属性またはオブジェクトを取得する方法
ご注意ください
1. プロパティまたはメソッドが存在しない場合にのみ最初の2つのパラメータは、エラーを通過した場合、
2. デフォルト値に属性、所定の方法であって、第3のパラメータセットが見つからないことを防止するため、または非存在下で
3. 取得方法は、括弧を持っていません!!!
# 创建user对象
user = User("haha", 37, "男")
# 获取属性值
res = getattr(user, "name")
print(res) # 输出结果:haha
# 获取不存在的属性
res_false = getattr(user, "uid")
print(res_false) # 报错
# 设置默认值
res_true = getattr(user, "uid", "不存在")
print(res_true) # 不报错,输出结果:不存在
# 获取方法
res_func = getattr(user, "show_userinfo")
print(res_func) # 输出结果:方法内存地址
# 获取带括号的方法
func_false = getattr(user, "show_userinfo()")
print(func_false) # 报错
# 设置默认值
func_true = getattr(user, "show_userinfo()", "不存在")
print(func_true) # 不报错,输出结果:不存在
SETATTR(OBJ、名前:STR、値)
「文字列」により、属性セット方法やオブジェクト
# 创建user对象
user = User("haha", 37, "男")
# 新增一个属性hobby,属性值是read
setattr(user, "hobby", "read")
print(user.hobby) # 输出:read
# 修改属性age的值
setattr(user, "age", 27)
print(user.age) # 输出:27
delattr(OBJ、名前:STR)
「文字列」によって、削除するオブジェクトにプロパティまたはメソッド
注意:
存在しないプロパティやメソッドを削除する文句を言うだろう
あなたはこの方法ではなく、括弧付きを削除すると!!
# 创建user对象
user = User("haha", 37, "男")
# 删除属性gender
delattr(user, "gender")
print(user.gender) # 删除后,输出结果:报错'User' object has no attribute 'gender'
# 删除一个对象没有的属性
delattr(user, "hobby") # 不存在的属性,删除会报错