Python入門の反射
2754 ワード
Python入門の反射
1、反射:(自省)
反射とは、主にプログラムが自身の状態や動作にアクセス、検出、変更できる能力(自省)を指す.
Pythonのオブジェクトへの反射:オブジェクトの関連プロパティを文字列で操作します.Pythonの中のすべてのものは対象です(反射を使うことができます)
<1>getattr()取得
<2>setattr()設定
<3>hasattr()は存在するか否かを判断する
<4>delattr()削除
(1)文字列によるオブジェクトの属性とメソッドの操作
(2)オブジェクトの角度反射を使う
(3)クラスの角度に反射を使う
(4)現在のモジュールでの反射の使用
(5)その他のモジュールでの反射の使用
(6)反射の適用シーン
上記のコードを修正して、コードを減らします(文字列でオブジェクトの属性と方法を操作します)
1、反射:(自省)
反射とは、主にプログラムが自身の状態や動作にアクセス、検出、変更できる能力(自省)を指す.
Pythonのオブジェクトへの反射:オブジェクトの関連プロパティを文字列で操作します.Pythonの中のすべてのものは対象です(反射を使うことができます)
<1>getattr()取得
<2>setattr()設定
<3>hasattr()は存在するか否かを判断する
<4>delattr()削除
(1)文字列によるオブジェクトの属性とメソッドの操作
class A:
def __init__(self,name):
self.name = name
def func(self):
print("is A func")
a = A("rimo")
A.func()
print(a.name)
a.func()
(2)オブジェクトの角度反射を使う
class A:
def __init__(self,name):
self.name = name
def func(self):
print("is A func")
a = A("rimo")
print(hasattr(a,"name")) # True name a
print(getattr(a,"name"))
f = getattr(a,"func")
f()
setattr(a,"age",18)
print(a.__dict__)
delattr(a,"name")
print(a.__dict__)
(3)クラスの角度に反射を使う
class A:
def __init__(self,name):
self.name = name
def func(self):
print("is A func")
a = A("rimo")
print(hasattr(A,"name"))
f = getattr(A,"func")
f(11)
(4)現在のモジュールでの反射の使用
def func():
print("is func")
# :
print(globals()["func"])
import sys
o = sys.modules[__name__] #
f = getattr(o,"func")
f()
(5)その他のモジュールでの反射の使用
import test #
test.func()
o = globals()["test"]
getattr(o,"func")()
(6)反射の適用シーン
class Blog:
def login(self):
print("is login")
def register(self):
print("is register")
def comment(self):
print("is comment")
def log(self):
print("is log")
def log_out(self):
print("is log_out")
b = Blog()
func_dic = {
"1":b.login,
"2":b.register,
"3":b.comment,
"4":b.log,
"5":b.log_out
}
msg = """
1.
2.
3.
4.
5.
"""
choose = input(msg)
if choose in func_dic:
func_dic[choose]()
上記のコードを修正して、コードを減らします(文字列でオブジェクトの属性と方法を操作します)
class Blog:
def login(self):
print("is login")
def register(self):
print("is register")
def comment(self):
print("is comment")
def log(self):
print("is log")
def log_out(self):
print("is log_out")
b = Blog()
msg = """
login
register
comment
log
log_out
"""
while 1:
choose = input(msg)
if hasattr(b,choose):
getattr(b,choose)()
else:
print(" !")