gpt4 book ai didi

python - 给定一个已经创建的python对象,有没有办法通过检查找出构造的实际参数?

转载 作者:行者123 更新时间:2023-11-28 18:59:09 24 4
gpt4 key购买 nike

  • 给定一个已经创建的对象,找出它是如何创建的最好方法是什么?基本上,我想弄清楚对象创建期间的实际参数(最终传递给类 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( ) 的实际参数 <br/>
    figure_out_actual_params(kmodel)

  • 现在搞清楚代码的实现:
    def figure_out_acutal_params( kmodel ):
    ...

  • 这里是重构调用Kmodel创建的实际参数需要实现的代码

  • 我检查了检查模块。虽然 inspect 可以转储很多信息,但我不清楚如何找出在实际创建对象 kmodel 期间提供的实际参数。

谢谢!

附言。请注意,关于此主题有几个类似的问题,我已全部阅读。我不认为这个问题是一样的。对于我的问题,我可以查询一个对象的所有内部对象属性,但在实际构建对象时,我仍然分不清指定了哪一个。 (棘手的问题是实际参数可能恰好是默认值。)

最佳答案

您可以向 __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) 来确定当前属性,但我认为除了在初始化期间存储它们之外没有任何其他方法来确定初始属性......

关于python - 给定一个已经创建的python对象,有没有办法通过检查找出构造的实际参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54640666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com