Пытаясь определить объект с двумя введенными переменными, почему класс не обновляет мой объект? - PullRequest
0 голосов
/ 01 февраля 2019

Просто пытаюсь понять классы и объекты.Почему я не могу получить идентификатор объекта для обновления с моими новыми значениями?Он возвращает «Экземпляр MatrixSquare не имеет атрибута ID». Разве я не определил это в классе?

#tomb of Bibi - initial code of classes and objects - started 1/30/19
#last revision:  1/31/2019
#---------------------------------------------------------------------
class MatrixSquare:
   def __init__(self):
    'Contains primary shapes and partial or full constructed shapes'
    # initialize row, col
    row=""
    col=""
    ID=[row,col]


# first object in class: MatrixSquare1        
MatrixSquare1=MatrixSquare()

#debug only- print variable ID from object
MatrixSquare1=MatrixSquare()
MatrixSquare1.row=input("row:")
MatrixSquare1.col=input("col:")
print("1st object row ",MatrixSquare1.row)
print("1st object col ",MatrixSquare1.col)
print("ist object ID ",MatrixSquare1.ID)

#debug only -create another object with new var id
MatrixSquare2=MatrixSquare()
MatrixSquare2.row=raw_input("row:")
MatrixSquare2.col=raw_input("col:")
print("2nd object row: ",MatrixSquare2.row)
print("2nd object col: ",MatrixSquare2.col)
print("2nd object ID",MatrixSquare2.ID)

Я ожидаю, что matrixsquare.id будет обновлен с введенными новыми значениями.Но он возвращает экземпляр не имеет атрибута "ID" "

1 Ответ

0 голосов
/ 01 февраля 2019

Чтобы ID был атрибутом экземпляра, вам нужно использовать self (именно так Python знает, что именно вы намерены)

, поэтому измените код на:

class MatrixSquare:
   def __init__(self):
    'Contains primary shapes and partial or full constructed shapes'
    # initialize row, col
    self.row=""
    self.col=""
    self.ID=[self.row,self.col]

Тот же принцип будет применяться для любых обновлений или использования из любого метода экземпляра

Однако, из вашего кода при обновлении col и row ID автоматически обновляться не будет (вынеобходимо написать что-то, что говорит Python, чтобы он обновлялся каждый раз, когда вы обновляете col или row; например, с помощью установщика)

Это может работать:

class MatrixSquare:
    def __init__(self):
        'Contains primary shapes and partial or full constructed shapes'
        # initialize row, col
        self._row=""
        self._col=""
        self.ID=[self._row,self._col]

    @property
    def col(self):
        return self._col

    @property
    def row(self):
        return self._row

    @col.setter
    def col(self,col):
        self._col = col
        self.ID = [self._row,self._col]

    @row.setter
    def row(self,row):
        self._row = row
        self.ID = [self._row,self._col]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...