由于已经创建了一个Python对象,是有办法通过检查找出建设的实际参数?

问题描述 投票:3回答:1
  • 由于已经创建了一个对象,什么是要弄清楚它是如何创建的最好方法?基本上,我想创建对象(最终传递给类init方法的实际参数)中找出的实际参数。
  • 请注意,我指的是实际参数在这里,而不是正式的参数。正式的参数也许接受20个不同的参数,也许他们中的16是可选的,每个默认值。在实际的呼叫(即,在创建对象的实例),也许只有5个参数给出,并且将它们的3恰好是一样的默认值。
  • 我想这样做是检索这5个参数和值,对象被创建之后。
  • 对于代码示例,可以说类的兴趣被称为Kmodel。 Kmodel构造函数接受20个不同的参数(其中16不需要由呼叫者指定)。
  • 在调用者的代码,这将是这样的: kmodel = Kmodel( param1 = 10, param2 = None, param3 = "name3", param4 = [1, 3, 5], param5 = dict("keyx": "valuey"}) ...
  • 后来调用一个方法来找出实际参数调用Kmodel()
    figure_out_actual_params(kmodel)
  • 现在代码的执行要弄清楚: def figure_out_acutal_params( kmodel ): ...
  • 这里要说的是需要实现重建的实际参数调用Kmodel创建代码
  • 我已经研究了检查模块。虽然检查可倾倒了大量的信息,但我不清楚如何找出实际的创建对象kmodel的过程中提供的实际PARAM。

谢谢!

PS。请注意,有关于这一主题的几个类似的问题,我已经阅读了他们。我不;吨认为这个问题是一样的。对于我的问题,我可以查询所有对象的内部对象的属性,我仍然会无法分辨出哪一个实际的对象施工过程中已指定。 (粘性的问题是实际参数可能恰好是默认值。)

python constructor initialization inspection
1个回答
0
投票

您可以添加到__init__节也许保存输入变量部分?

class MyThing:
    def __init__(self, arg1, arg2):
        self.arg1 = arg1
        self.arg2 = arg2
        self.initial_settings = [arg1, arg2]

然后,只要你永远不会覆盖self.initial_settings将举行它与(让你自由地改变self.arg1例如)初始化值。您还可以包括一些if逻辑来确定是否默认参数是在创建覆盖(虽然我不相信有办法判断一个初始值提供这等同于默认值)。否则,我认为你将不得不使用dir(some_object_instance)来确定当前属性,但我不认为有任何其他的方式来确定除了初始化期间存储这些初始属性...

© www.soinside.com 2019 - 2024. All rights reserved.