首页 > 解决方案 > 检查内部函数是否由相同的函数创建

问题描述

假设我有类似的东西:

def a(b):
   def c(d):
      # do someting 
      # ...
      # ...
      return something_else
   return c

然后这个:

q = a(54)
w = a(97)
e = a(12)

有什么方法可以知道例如 q 和 w 是否都是由 a 创建的?或者我可以做些什么来检查它?

我虽然关于做一个空类,然后从那个覆盖 __call__ 并使用 issubclass 继承,但它似乎有点 hacky(如果它实际上是一个正常功能,会引发),也许有更好的选择。

谢谢。

标签: pythonpython-3.x

解决方案


你可以躲开它:

def a(b):
   def c(d):
     # do stuff
     return stuff
   c.created_by = 'a'
   return c

那么当你使用它时...

q = a(54)
w = a(97)

q.created_by == w.created_by # True

不判断,因为我不知道你为什么要这样做,或者真的理解这个问题,但我个人认为这是一个比通过类做更大的黑客攻击:

class A(object):
    def __init__(self, b):
        self.b = b

class C(A):
    def do_stuff(self, d):
        return self.b * d

q = C(54)
w = C(97)

isinstance(q, A) # True

推荐阅读