Итак, я пытаюсь создать список объектов класса, используя вложенные циклы while. У меня есть два типа классов: normal_class и special_class.
Для special_class я даю ему координаты x, y, выполняя special_class.set (x, y). Для обычного класса я просто оставляю его как есть.
Если я добавлю еще один special_class, выполнив special_class.set (x, y), а затем ls.append (special_class), он переопределит координаты первого , поэтому я получаю два special_class с одинаковыми координатами вместо двух special_class с отдельными координатами.
Я только недавно начал программировать на Python, поэтому любая помощь будет полезна :)
Это некий псевдокод:
- Ввод - строка символов ie. «XXY»
- Я сравниваю каждый из этих символов со словарем, который я создал ie. dict = {"X": special_class (), "Y": normal_class}
- Я хочу установить координаты special_class, normal_class не имеет атрибутов координат
- Если character_from_string == key из словаря проверьте, является ли это специальным или обычным классом. Затем используйте пару значений
- Если это специальный класс, set_pos (x, y) для некоторых чисел x, y. Если это нормально, передайте
- Добавить экземпляр класса в список
- Так что я надеюсь получить такой результат, как [объект special_class, объект special_class, объект normal_class]
- Если я сделаю ls [0] .get_pos и ls [1] .get_pos, он вернет то же значение, даже если я установил для него разные x, y. Зачем? И как я могу это исправить?
Код!
class special_class:
def __init__(self):
self.char = "X"
def set_pos(self, x, y):
self.x = x
self.y = y
def get_pos(self):
return (self.x, self.y)
class normal_class:
def __init__(self):
self.char = "Y"
class also_special_class:
def __init__(self):
self.char = "Z"
def set_pos(self, x, y):
self.x = x
self.y = y
def get_pos(self):
return (self.x, self.y)
string = "XYXZ"
dict = {"X": special_class(), "Y": normal_class(), "Z": also_special_class()}
ls = []
i = 0
while i < len(string):
k = 0
keys = list(dict.keys())
while k < len(keys):
if string[i] == keys[k]:
instance = dict[keys[k]]
if keys[k] == "X" or keys[k] =="Z": # i and k numbers that change
special_class = instance.set_pos(i, k) # why is special_class None?
### this code is ugly but it's the only way I know of doing it without errors
### however, the position of the two elements is not what I put into it initially
special_instance = dict[keys[k]]
special_instance.set_pos(i,k)
print(special_instance.get_pos())
instance = special_instance
ls.append(instance)
k += 1
i += 1
print()
print(ls)
print("\nPosition after finished loop")
print(ls[0].get_pos())
print(ls[2].get_pos())
Если бы вы могли дать мне указатели на а) почему этот прокомментированный фрагмент special_class возвращает None b) Указатели что касается улучшения моего кода, особенно этой части
special_instance = dict[keys[k]]
special_instance.set_pos(i,k)
print(special_instance.get_pos())
instance = special_instance
c) Объяснение, почему я получаю те же значения для get_pos и как я могу исправить свой код, чтобы он работал так, как задумано, будь потрясающим !!