parse
といういくつかのメソッドは静的メソッドまたはクラスメソッドです。どちらの場合も、入力がNone
の場合、None
を返すようにします。ここで Pythonでは、クラスメソッドと静的メソッドの両方のラッパーを作成する方法
import types
def maybe(function):
if type(function) == types.FunctionType:
def wrapped_function(arg, **kwargs):
return function(arg, **kwargs) if arg is not None else None
return wrapped_function
elif type(function) == types.MethodType:
def wrapped_function(cls, arg, **kwargs):
return function(cls, arg, **kwargs) if arg is not None else None
return wrapped_function
else:
raise TypeError("The 'maybe' wrapper can wrap either a function or a method.")
はそれに同行するためにいくつかのテストと例のユースケースである:この目的を達成するために、私は次のラッパー
maybe
を定義しようとしました
import pytest
class Resource(object):
@classmethod
@maybe
def parse_class(cls, string):
pass
@staticmethod
@maybe
def parse_static(string):
pass
'''Tests'''
def test_maybe_parse_class():
assert Resource.parse_class(None) == None
def test_maybe_parse_static():
assert Resource.parse_static(None) == None
if __name__ == "__main__":
pytest.main([__file__])
問題は、第二のテストはして失敗したということです
TypeError: wrapped_function() takes exactly 1 argument (2 given)
私がで検証したにも関わらず、Pythonはif type(function) == types.FunctionType
ブロックの内容を評価するか、[チェック]をしようとしているようですブール値がFalse
であるという文。
どのようにしてこのラッパーを両方のテストで動作させることができますか?
ありがとう、Python 2で動作します。 –