如何获取函数中使用的参数值

时间:2019-09-26 18:29:18

标签: python

我有一个超类(在框架中定义)。有人使用我的框架制作了父类的子类(通过pip install)。然后,他们初始化其类的对象。我如何找出进入该init的所有args和值?

class Parent(object):

class Child(Parent):
    def __init__(self, arg_1, arg_2, some_object):
        pass


obj = Child(2, {'some': 'dict'}, MyObject())

是否可以查看对象函数以查看其使用了什么值? (该对象不是由我创建的...因此即使查看self.whatever也不能保证在该函数调用中使用所有值)。

some_magic(obj.__init__)  
# {arg_1: 2, arg_2: {'some': 'dict'}, some_object: MyObject_instance}

1 个答案:

答案 0 :(得分:0)

您可以获取传递给您的子类的用户参数及其值,如下所示:

class MyClass():
    def __init__(self, arg1, arg2=2):
        self.arg1 = arg1
        self.arg2 = arg2
        self.user_args = dict([(key,val) for key,val in locals().items() 
                                       if key!='self' and key!='__class__'])
    # def other_methods() ...

然后,当用户创建自己的类usr_class = UserClass(a, b, some_object=MyClass(5, 10))时-您可以:

print(user_class.some_object.user_args)
# {'arg1': 5, 'arg2': 10}


如果您还想获取UserClass参数,那么即使有可能,也会涉及更多的内容。主要的复杂之处在于,MyClass作为参数传递给UserClass,而不是继承-意思是,首先实例化MyClass,然后将其设置为UserClass。换句话说,就MyClass而言,UserClass不存在。

我看到不继承而获得UserClass args的一种方法是,对运行时生成的pycache进行反编译,可以通过MyClassglobals()内部进行访问-但它可以不会容易。