user7692855:
私は、単純なPythonのデコレータを作成するために探していますが、私は確かに私はそれを最も効率的な方法を実装していないのです。私は装飾しています機能は車の登録を返しますが、私はいつもテスト登録を返すことができるようにしたいです。
私は署名を飾っていたクラスメソッドは次のとおりです。
def get_car_registration(self, car_details)
これはデコレータの私の現在の試みです。それを行うには、より効率的な方法はあります。
from functools import wraps
def mock_registration(func):
@wraps(func)
def wrapper(*args, **kwargs):
pargs = list(args)
class_obj = pargs[0]
car_details = pargs[1]
if class_obj.test and car_details.car_name.startswith('test_demo'):
return 0
return func(*args, **kwargs)
return wrapper
z
schwobaseggl:
署名が予め分かっている場合は、それを使用する必要があります。明示的、暗黙よりも優れています:
def mock_registration(func):
@wraps(func)
def wrapper(obj, car_details):
if obj.test and car_details.car_name.startswith('test_demo'):
return 0
return func(obj, car_details)
return wrapper
あなたと同じ署名機能が異なるものを返す場合は、別のデフォルトの戻り値を渡すパラメータ設定デコレータを作ることにしたかもしれません。
def mock_registration(default=0):
def decorator(func):
@wraps(func)
def wrapper(obj, car_details):
if obj.test and car_details.car_name.startswith('test_demo'):
return default
return func(obj, car_details)
return wrapper
return decorator
そして、方法を飾ります:
@mock_registration()
def get_car_registration(self, car_details):
# ....