Передача экземпляра типа / класса в качестве аргумента конструктору класса? - PullRequest
0 голосов
/ 12 мая 2019

Я начинаю разрабатывать некоторый код на python (имею некоторый опыт работы с C и C ++), и у меня возникают проблемы с пониманием того, как передать конкретный тип конструктору другого класса.Рассмотрим пример:

class baseClass(object):
    def __init__(self,x,y):
        self.x = x
        self.y = y

class myClass(object):
    def __init__(self, otherClass,size):
        self.myMember = [otherClass] * size 

    def addMemberInstance(self,otherClass):
        self.myMember.append(otherClass)

    def setOtherClassX(self,pos,x):
        self.myMember[pos].x = x

    def getOtherClassX(self,pos):
        return self.myMember[pos].x

    def printMemberXs(self):
        print("----")
        for m in self.myMember:
            print(m.x)
        print("----")

# populate myClass myMember list with 10 instances of baseClass
foo = myClass(baseClass(5,6),10)  
foo.printMemberXs()

# change atribute of myMember entry at pos 3 with val 16
foo.setOtherClassX(3,16)
foo.printMemberXs() # apparently all entries in the list are changed

# append a new entry to myMember with a new instance of baseClass
foo.addMemberInstance(baseClass(3,7))
foo.printMemberXs()

# change atribute of new myMember entry (at pos 10) with val 47
foo.setOtherClassX(10,47)
foo.printMemberXs() #only the last entry was changed!

Причина, по которой я пытаюсь это сделать, заключается в том, что у меня будет несколько классов, которые будут производными от baseClass, и я хотел бы передать тип / конструктор / экземпляр в myClass конструктор.Меня особенно смущает разница между созданием списка предварительно определенного размера или простым добавлением каждой записи по отдельности?

1 Ответ

1 голос
/ 12 мая 2019

Чтобы получить то, что вы есть, внесите следующие изменения:

class myClass(object):
    def __init__(self, instances):  # parameter of a list of separate instances
        self.myMember = instances
    # rest of members

foo = myClass([baseClass(5,6) for _ in range(10)])  # Make a list with 10 distinct instances
# rest of program here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...