假设我有以下代码片段:

class A:
    def __init__(self, p1=1, p2=None, p3="test"):
        self.p1 = p1
        self.p2 = p2
        self.p3 = p3

a1 = A()
a2 = A(p1=2, p3="blah")

我想要做的是以某种方式只检索传递到构造函数中的命名参数,而不包括带有缺省值的可选参数.需要说明的是,这并不意味着使用Inspect返回所有参数的列表.例如,对于a1,这将是{},因为构造函数是在没有参数的情况下调用的;对于a2,这将是{"p1": 2, "p3": "blah"},因为构造函数是用p1和p3调用的. 我试着用谷歌搜索了一下,似乎这不太可能,或者至少我还没有找到这样做的方法.

判断不起作用,因为我想对每个单独的实例化执行此操作.在构造函数中使用本地变量()也不起作用,因为它还包括可选参数,即使它们没有显式传入.

推荐答案

你可以像这样截取__new__中的论点:

class A:
    def __init__(self, p1=1, p2=None, p3="test"):
        self.p1 = p1
        self.p2 = p2
        self.p3 = p3
        
    def __new__(cls, *args, **kwargs):
        print(f"{kwargs = }")
        return super().__new__(cls)


>>> a1 = A()
kwargs = {}
>>> a2 = A(p1=2, p3="blah")
kwargs = {'p1': 2, 'p3': 'blah'}

Python相关问答推荐

从多行文本中提取事件对

计算每月过go x年的平均值

如何修复fpdf中的线路出血

如何使用scikit-learn Python库中的Agglomerative集群算法以及集群中声明的对象数量?

仅对matplotlib的条标签中的一个条标签应用不同的格式

为什么dict(id=1,**{id:2})有时会引发KeyMessage:id而不是TypMessage?

使用scipy. optimate.least_squares()用可变数量的参数匹配两条曲线

如何根据日期和时间将状态更新为已过期或活动?

仅从风格中获取 colored颜色 循环

在Python中对分层父/子列表进行排序

Pydantic 2.7.0模型接受字符串日期时间或无

将整组数组拆分为最小值与最大值之和的子数组

不理解Value错误:在Python中使用迭代对象设置时必须具有相等的len键和值

加速Python循环

NP.round解算数据后NP.unique

运输问题分支定界法&

改进大型数据集的框架性能

如何使用SentenceTransformers创建矢量嵌入?

如何从列表框中 Select 而不出错?

OpenGL仅渲染第二个三角形,第一个三角形不可见