检查内部函数是否由同一函数创建

时间:2019-06-21 03:41:04

标签: python python-3.x

假设我有类似的东西:

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(并且如果它实际上是一个正常的功能,则会出现错误),也许还有更好的选择。

>

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以鸭打它:

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