将两个不同类的实例合并为新对象或修改对象的干净方法

2024-09-30 05:14:58 发布

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

给定Python中两个不同类的实例,我想将它们组合起来,生成一个具有组合对象“内存”的新对象,或者生成一个保留其初始属性但开发新属性的修改实例(如本文所述)

显然,下面的例子很愚蠢,但只是出于解释目的

因此,我有一个对象foo(类MainObject),它应该与类OneNumber(这里,abc)的不同实例相结合。我需要:

  1. 保留原始对象(abc)或初始字段(的 foo)不变
  2. 跟踪并使用它们(即,我的最终对象应该能够使用“内部”初始OneNumberMainObject实例来使用它们的字段并生成新的内容,这里通过self.getNewNumber方法)
  3. 能够单独调用相关的结果组合(即,这里“第一”表示[afoo]组合,“第二”表示[bfoo]组合,等等)

为了解决上述3个问题,我创建了一个字典来存储各个组合。那么,如何理想地创建关键点呢?显然,这是次优的。为OneNumber类提供一个self.name字段可能是一个更好的(?)选项

但我相信真正的程序员一定有更好的方法来完成这一切,对吗

例如,创建一个新的“组合”类(一个OneNumber实例和一个MainObject实例作为参数传递——三次创建三个新对象)会更好吗

class OneNumber():
    def __init__(self, n):
        self.number = n

class MainObject():
    def __init__(self, n):
        self.number = n
        self.dic = {}
        self.newnumber = {}
        self.keys = ['3rd', '2dn', '1st']

    def combineOneNumber(self, onenum):
        combname = self.keys.pop()
        self.dic[combname] = onenum
        self.getNewNumber(combname)

    def getNewNumber(self, combname):
        self.newnumber[combname] = self.number + self.dic[combname].number


a = OneNumber(8)
b = OneNumber(13)
c = OneNumber(23)

foo = MainObject(2)
foo.combineOneNumber(a)
foo.combineOneNumber(b)
foo.combineOneNumber(c)
print(foo.newnumber)
# {'1st': 10, '2dn': 15, '3rd': 25}

Tags: 对象实例方法selfnumber属性foodef
1条回答
网友
1楼 · 发布于 2024-09-30 05:14:58

我实际上不知道这个代码的目的。但是我更改了代码的某些部分,这可能会有所帮助。如果您想编写更干净的代码,我建议您阅读“干净的代码”和“python技巧”。😃

class OneNumber():
def __init__(self, number):
    self.number = number

def __repr__(self):
    return f"OneNumber({self.number})"


class MainObject():
    def __init__(self, number):
        self.number = number
        self.dic = {}
        self.new_number = {}
        self.keys = ['3rd', '2dn', '1st']

    def __repr__(self):
        return f'MainObject{self.new_number}'

    def comibne_numbers(self, *args):
        for number in args:
            combname = self.keys.pop()
            self.dic[combname] = number
            self.set_new_number(combname)

    def set_new_number(self, combname):
        self.new_number[combname] = self.number + self.dic[combname].number


a = OneNumber(8)
b = OneNumber(13)
c = OneNumber(23)

foo = MainObject(2)
foo.comibne_numbers(a, b, c)
print(foo)

相关问题 更多 >

    热门问题