スムーズなpython学習ノート-10章
3342 ワード
10章-シーケンスの変更、ハッシュ、スライス
はんしゃ
反射とは主に、pythonですべてのオブジェクト(クラス、インスタンス、モジュールなど)がオブジェクトにアクセスし、検出し、変更できる機能を指し、反射の形式でオブジェクト関連のプロパティを操作できます.
文字列データ型の変数名または関数名で対応する属性A.b getattr(A,'b')を呼び出す
さぎょう
1.挿抜可能な機構を実現する
インタフェースを事前に定義することができます.インタフェースは完了してから本当に実行されます.これはプラグアンドプレイを実現します.これは実は「後期バインド」です.どういう意味ですか.つまり、主な論理を事前に書き(インタフェースのみを定義)してから、後でインタフェースの機能を実現することができます.
例を挙げます.
demo.py
その他のファイル呼び出し:
2.動的インポートモジュール
demo/
work.py
このワークを外層で呼び出したい.pyのtestメソッドでは、次の方法を使用できます.
Python反射方法
Pythonでの反射には主に以下の方法があります.
1.hasattr(object,name)オブジェクトにname文字列が1つあるか否かを判断する方法または属性
2.getattr(object,name,default=None)オブジェクトname文字列属性の値を取得し、defaultを返す値が存在しない場合
3.setattr(object,key,value)設定オブジェクトのkey属性はobjectに等しいvalue値である.key = value
4.delattr(object,name)オブジェクトのname文字列属性を削除
はんしゃ
反射とは主に、pythonですべてのオブジェクト(クラス、インスタンス、モジュールなど)がオブジェクトにアクセスし、検出し、変更できる機能を指し、反射の形式でオブジェクト関連のプロパティを操作できます.
文字列データ型の変数名または関数名で対応する属性A.b getattr(A,'b')を呼び出す
さぎょう
1.挿抜可能な機構を実現する
インタフェースを事前に定義することができます.インタフェースは完了してから本当に実行されます.これはプラグアンドプレイを実現します.これは実は「後期バインド」です.どういう意味ですか.つまり、主な論理を事前に書き(インタフェースのみを定義)してから、後でインタフェースの機能を実現することができます.
例を挙げます.
demo.py
class FanShe(object):
x = 1
def test1(self):
print('this is test1')
def test(self):
print("this is test")
その他のファイル呼び出し:
import demo as tf
c = tf.FanShe
# c test , ,
if hasattr(c, 'test'):
func = getattr(c, 'test')
print(func("hello"))
else:
print(' ')
print(' ')
2.動的インポートモジュール
demo/
__init__.py
demo/work.py work.py
def test():
print('this is test')
このワークを外層で呼び出したい.pyのtestメソッドでは、次の方法を使用できます.
M = __import__('demo.work')
print(M)
M.work.test()
#
import importlib
M = importlib.import_module('demo.work')
print(M)
M.test()
Python反射方法
Pythonでの反射には主に以下の方法があります.
1.hasattr(object,name)オブジェクトにname文字列が1つあるか否かを判断する方法または属性
2.getattr(object,name,default=None)オブジェクトname文字列属性の値を取得し、defaultを返す値が存在しない場合
3.setattr(object,key,value)設定オブジェクトのkey属性はobjectに等しいvalue値である.key = value
4.delattr(object,name)オブジェクトのname文字列属性を削除
class Cat(object):
class_level = ' '
def __init__(self, name, type, speed, age):
self.name = name
self.type = type
self.speed = speed
self.age = age
def run(self):
print('%s %s%s %s ' %
(self.age, self.type, self.name, self.speed))
xiaohua = Cat(' ', ' ', '10m/s', 10)
xiaohua.run() # 10 10m/s
# hasattr(object, name) name
print(hasattr(xiaohua, 'name')) # xiaohua name , True, name ,
# 'name'
print(hasattr(xiaohua, 'size')) # False size
# 2.getattr(object, name, default=None) name ,
# default
print(getattr(xiaohua, 'speed', '20m/s')) # 10m/s
# xiaohua speed ,speed
print(xiaohua.__dict__)
# {'name': ' ', 'type': ' ', 'speed': '10m/s', 'age': 10}
print(getattr(xiaohua, 'weight', '5kg'))
# 5kg, xiaohua weight , , default
# print(getattr(xiaohua, 'weight')) # default ,
# AttributeError: 'Cat' object has no attribute 'weigh'
# 3.setattr(object, key, value)# key value
# object.key = value
setattr(xiaohua, 'weight', '5kg')
# xiaohua weight
print(xiaohua.__dict__)
# {'name': ' ', 'type': ' ', 'speed': '10m/s', 'age': 10, 'weight': '5kg'}
# 4.delattr(object, name) name
delattr(xiaohua, 'weight')
print(xiaohua.__dict__)
# {'name': ' ', 'type': ' ', 'speed': '10m/s', 'age': 10}