我有一个超类(在框架中定义)。有人使用我的框架制作了父类的子类(通过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}
答案 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
进行反编译,可以通过MyClass
在globals()
内部进行访问-但它可以不会容易。