python 将方法转换为函数
python Convert a method to a function
假设我有一个名为 myMD5
的对象,如下所示:
<md5 HASH object @ 0xb79b9860>
这里是 dir(myMD5)
:
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'block_size', 'copy', 'digest', 'digest_size', 'digestsize', 'hexdigest', 'name', 'update']
我想获取哈希字符串,为此我需要调用 myMD5.hexdigest()
。
问题是我实际上是在挑战(称为 PyJail)并且禁止使用字符点 (.
)。
所以,我需要用另一种方式来调用这个方法。
有没有办法像函数一样调用它?像这样:
hexdigest(myMD5)
我尝试这样做,但它不起作用:
getattr(myMD5, dir(myMD5)[-3]) # returns <classmethod object at 0xb79b998c>
PS;挑战还禁止使用其他元素,例如使用引号 ('
、"
)、使用 import
语句、使用 exec
或 eval
等.
getattr(myMD5, dir(myMD5)[-3])
return是对象上要调用的方法,那么你只需要运行方法使用括号()
:
myMD5 = md5('fooBar123'.encode("utf-8"))
hexDigestForMyMD5 = getattr(myMD5, dir(myMD5)[-3])
print(hexDigestForMyMD5()) # dab589b4623e03507d4f094605813ff3
print(md5('fooBar123'.encode("utf-8")).hexdigest()) # dab589b4623e03507d4f094605813ff3
或者从 Calling a function of a module by using its name (a string) 你可以缩短到
getattr(myMD5, dir(myMD5)[-3])()
getattr(myMD5, 'hexdigest')()
因为这不是 return 一个点
假设我有一个名为 myMD5
的对象,如下所示:
<md5 HASH object @ 0xb79b9860>
这里是 dir(myMD5)
:
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'block_size', 'copy', 'digest', 'digest_size', 'digestsize', 'hexdigest', 'name', 'update']
我想获取哈希字符串,为此我需要调用 myMD5.hexdigest()
。
问题是我实际上是在挑战(称为 PyJail)并且禁止使用字符点 (.
)。
所以,我需要用另一种方式来调用这个方法。 有没有办法像函数一样调用它?像这样:
hexdigest(myMD5)
我尝试这样做,但它不起作用:
getattr(myMD5, dir(myMD5)[-3]) # returns <classmethod object at 0xb79b998c>
PS;挑战还禁止使用其他元素,例如使用引号 ('
、"
)、使用 import
语句、使用 exec
或 eval
等.
getattr(myMD5, dir(myMD5)[-3])
return是对象上要调用的方法,那么你只需要运行方法使用括号()
:
myMD5 = md5('fooBar123'.encode("utf-8"))
hexDigestForMyMD5 = getattr(myMD5, dir(myMD5)[-3])
print(hexDigestForMyMD5()) # dab589b4623e03507d4f094605813ff3
print(md5('fooBar123'.encode("utf-8")).hexdigest()) # dab589b4623e03507d4f094605813ff3
或者从 Calling a function of a module by using its name (a string) 你可以缩短到
getattr(myMD5, dir(myMD5)[-3])()
getattr(myMD5, 'hexdigest')()
因为这不是 return 一个点