Pythonのベース - オブジェクト指向プログラミングの反射

反射オブジェクト指向プログラミング

反射

定義:することにより、文字列オブジェクトのプロパティとメソッドの操作。

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") # 不存在的属性,删除会报错

おすすめ

転載: www.cnblogs.com/xiaodan1040/p/11958274.html