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 语句、使用 execeval 等.

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 一个点