Передайте объект как список в конструкторе подкласса в python - PullRequest
1 голос
/ 28 мая 2020

Как реализовать подкласс B для функции getdata(), чтобы возвращать детали в конструкторе? Я мог бы добиться этого, если бы конструктор в B принимает один объект, но испытывал бы трудности, если бы объектов было два или больше и они передавались как list.

Этот пример показывает, что я задумал. Код не имеет полной реализации.

class A(object):
    def __init__(self, a):
        self.a = a

    def geta(self):
        return str(self.a) 


class B(A):
    def __init__(self, b,c, [objA1, objA2]):
        self.b = b
        self.c = c
        super().__init__()
        # ...        

    def geta(self):
        return str(self.a) 

    def getb(self):
        return str(self.b)

    def getdata(self):
        return str(self.geta()) + str(self.getb()) + ...


obja1 = A('John')
obja2 = A('Doe')
obj = B('123', '456', [obja1, obja2])

# Test1 obj.getdata() == "John Doe 123 456"

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Вы можете сделать это и передать как обычные аргументы, а затем преобразовать в список

class B(A):
    def __init__(self,b,objA1,objA2):
        self.b = b
        self.list = [objA1, objA2]
        super().__init__()
obj = B("hello", "JOHN","DOE")

, как это работает, в основном вы говорите, что ob js будет быть списком

class B(A):
     def __init__(self,b, objs: list):
         self.b = b
         self.list = objs
         super().__init__()
obj = B("hello", ["JOHN","DOE"])
0 голосов
/ 28 мая 2020

Значит, здесь вам не нужно наследование. Композиции будет достаточно.

Этот код производит вывод в соответствии с вашими требованиями:

class A:
    def __init__(self, a):
        self.a = a

    def __repr__(self):
        return str(self.a)


class B:
    def __init__(self, b, c, others):
        self.b = b
        self.c = c
        self.others = others

    def getdata(self):
        items = self.others + [self.b, self.c] 
        return ' '.join([str(item) for item in items])


obja1 = A('John')
obja2 = A('Doe')
obj = B('123', '456', [obja1, obja2])
print(obj.getdata())

Вывод:

John Doe 123 456
...