Возникли проблемы при передаче значений моему объекту в Python.Используйте `self` или есть лучший подход? - PullRequest
0 голосов
/ 11 февраля 2019

Для начала я изучил Java, затем C, и сейчас углубляюсь в Python 3.6.У меня проблемы с печатью значений из объекта в основном

Изначально я начал с передачи значений в мой объект Preferences с использованием self.Затем я создал переменную p из моего Preferences объекта, а затем напечатал p в своем основном методе.Когда я пытался печатать, не появлялось ни одно из моих значений, которые я пытался установить в моих методах.Мне повезло больше с этим, установив значения в Preferences с помощью p.size, p.preferences, etc..., потому что я смог увидеть, что при печати p в методе все мои заданные значения будут отображаться.

Ниже мой код.Я читаю целые числа из файла, а затем задаю им значения внутри моего Preferences объекта.

Вот файл:

4
1 2 3 4 
2 1 3 4
3 4 1 2
4 3 1 2 
2 1 3 4
1 2 3 4
4 3 1 2
3 4 1 2

А вот и мой код.

class Preferences:

    def __init__(self):
        self.preferences = []
        self.size = 0
        self.m_preferences = []
        self.f_preferences = []

    def __str__(self):
        return "Preferences object\nSize: {}\nPreferences: {}\nMale Preferences: {}\nFemale Preferences: {}".format(self.size, self.preferences, self.m_preferences, self.f_preferences)

    def get_preferences(self):
        p = Preferences()
        p.size = self.size
        p.preferences = self.preferences
        p.m_preferences = self.preferences[0: len(self.preferences)//2]
        p.f_preferences = self.preferences[len(self.preferences)//2 : len(self.preferences)]

    def read_file(self):
        p = Preferences()
        with open('input1.txt', 'r') as f:
            p.size = f.readline()
            temp_preferences = f.readlines()
            p.preferences = [x.strip().split(' ') for x in temp_preferences[0:]]
            p.get_preferences()

def main():
    p = Preferences()
    p.read_file()
    print(p)

if __name__ == "__main__":
    main()

Вот моя попытка передать все значения в моих методах с использованием p = Preferences() для присвоения значений таким переменным, как size, m_preferences, etc. Я ожидал увидеть

Preferences object
Size: 4

Preferences: [['1', '2', '3', '4'], ['2', '1', '3', '4'], ['3', '4', '1', '2'], ['4', '3', '1', '2'], ['2', '1', '3', '4'], ['1', '2', '3', '4'], ['4', '3', '1', '2'], ['3', '4', '1', '2']]
Male Preferences: [['1', '2', '3', '4'], ['2', '1', '3', '4'], ['3', '4', '1', '2'], ['4', '3', '1', '2']]
Female Preferences: [['2', '1', '3', '4'], ['1', '2', '3', '4'], ['4', '3', '1', '2'], ['3', '4', '1', '2']]`

Но вместо этого я получаюпустые значения этих значений:

Preferences object
Size: 0
Preferences: []
Male Preferences: []
Female Preferences: []`

1 Ответ

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

Проблема в вашем коде заключается в том, что вы создаете экземпляр нового объекта Preference внутри read_file и get_preferences.

Фиксированный код будет выглядеть как

class Preferences:

    def __init__(self):
        self.preferences = []
        self.size = 0
        self.m_preferences = []
        self.f_preferences = []

    def __str__(self):
        return "Preferences object\n{}\n{}\n{}\n{}".format(self.size, self.preferences, self.m_preferences, self.f_preferences)

    def get_preferences(self):
        self.m_preferences = self.preferences[0: len(self.preferences)//2]
        self.f_preferences = self.preferences[len(self.preferences)//2 : len(self.preferences)]

    def read_file(self):
        with open('input1.txt', 'r') as f:
            self.size = f.readline()
            temp_preferences = f.readlines()
            self.preferences = [x.strip().split(' ') for x in temp_preferences[0:]]
            self.get_preferences()

def main():
    p = Preferences()
    p.read_file()
    print(p)

if __name__ == "__main__":
    main()

И вывод:

python3 t.py
Preferences object
4

[['1', '2', '3', '4'], ['2', '1', '3', '4'], ['3', '4', '1', '2'], ['4', '3', '1', '2'], ['2', '1', '3', '4'], ['1', '2', '3', '4'], ['4', '3', '1', '2'], ['3', '4', '1', '2']]
[['1', '2', '3', '4'], ['2', '1', '3', '4'], ['3', '4', '1', '2'], ['4', '3', '1', '2']]
[['2', '1', '3', '4'], ['1', '2', '3', '4'], ['4', '3', '1', '2'], ['3', '4', '1', '2']]
...