Mixin中的属性能否成为嵌套对象?

2024-10-01 02:20:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个python客户端来与RESTAPI交互。API使用JSON,我需要创建的一些对象是嵌套的,并且有很多可选参数。我试图用基本对象的类来表示嵌套的JSON,并混合所有可选的嵌套属性。我对python非常陌生,因此任何关于管理嵌套JSON而不重复一堆代码的好方法的建议也会有所帮助

下面是一个例子:

class paramMixin(object):
    def __init__(self, prop1, prop2, **kwargs):
        self.prop1 = prop1
        self.prop2 = prop2
        self.__dict__.update(kwargs)


class baseObject(paramMixin):
    def __init__(self, name, prop1, prop2, **kwargs):
        self.name = name
        self.__dict__.update(kwargs)
    super().__init__(prop1, prop2)

这样做会生成如下对象:

>>> myObj = baseObj('myName', 'myProp1', 'myProp2')
>>> myObj.prop1
'myProp1'

我希望发生的是:

>>> myObj = baseObj('myNmae', 'myProp1', 'myProp2')
>>> myObj.paramMixin.prop1
'myProp1'

我知道我可以很明显地拥有所有需要嵌套为字典的属性,但如果可以的话,我正试图将其抽象出来

我知道这可以奏效:

class baseObject(object):
    def __init__(self, name, prop1, prop2)
        self.name = name
        self.prop1 = prop1
        self.prop2 = prop2

然后定义如下:

>>> myObj = baseObject('myName', {'paramMixin': 'myProp1'}, {'paramMixin': 'myProp2'})
>>> myObj.paramMixin.prop1
'myProp1'

我试图定义的许多Mixin对象可以在多种类型的对象中重用。这就是为什么我试图找到一种方法来定义它一次,并且只在我需要的时候构建它


Tags: 对象nameselfjsoninitdefkwargsclass
1条回答
网友
1楼 · 发布于 2024-10-01 02:20:37

您需要在baseObject的__init__方法内创建一个paraMixinobj

class paramMixin(object):
    def __init__(self, prop1, prop2, **kwargs):
        self.prop1 = prop1
        self.prop2 = prop2
        self.__dict__.update(kwargs)


class baseObject:
    def __init__(self, name, prop1, prop2, **kwargs):
        self.name = name
        self.paramixin = paramMixin(prop1, prop2, **kwargs)

myObj = baseObject('myNmae', 'myProp1', 'myProp2')
myObj.paramixin.prop1 
# myProp1

相关问题 更多 >