Добавление нового объекта в класс с пользовательским вводом (вводом) в Python - PullRequest
1 голос
/ 29 марта 2019

Я пытаюсь добавить новые объекты в класс (emne), но новые экземпляры класса должны быть созданы с использованием пользовательского ввода.Поэтому мне нужен способ, чтобы иметь возможность выбрать имя для объекта и установить некоторые значения объектов с помощью пользовательского ввода.

Я уже пытался создать функцию, которая передает значение ввода пользователяв ax = emner (x), чтобы создать его, но он только возвращает: AttributeError: у объекта 'str' нет атрибута 'fagKode', поэтому я считаю, что моя проблема заключается в том, что значение входных данных создается в виде строки, поэтому его не понимаютв качестве способа создания функции

 emne=[]
 class Emne:

    def __init__(self,fagKode):
        self.fagKode = fagKode
        self.karakter = ""
        emne.append(self)


    def leggTilEmne():
        nyttEmne = input("test:")
        nyttEmne=Emne(nyttEmne)

ожидаемый результат состоит в том, что код создает новый экземпляр класса.

Ответы [ 3 ]

0 голосов
/ 29 марта 2019

Я не уверен, что именно вы спрашиваете, так как вы не ответили на комментарии. Таким образом,

emne=[]
class Emne:

   def __init__(self,fagKode):
       self.fagKode = fagKode
       self.karakter = ""
       emne.append(self)


   def leggTilEmne(self, value): # <--- is this what you want
       self.nyttEmne= Emne(value) 
0 голосов
/ 29 марта 2019

Это пример того, когда использовать метод класса.__init__ не должен добавляться к глобальной переменной.Либо 1) добавьте метод класса к атрибуту класса, либо 2) сделайте так, чтобы он возвратил объект и позволил вызывающей стороне поддерживать глобальный список.

 emne = []

 class Emne:
    emne = []

    def __init__(self, fag_kode):
        self.fag_kode = fag_kode
        self.karakter = ""

    @classmethod
    def legg_til_emne_1(cls):
        nytt_emne = input("test:")
        cls.emne.append(cls(nytt_emne))

    @classmethod
    def legg_til_emne_2(cls):
        nyttEmne = input("test:")
        return cls(nyttEmne)


Emne.legg_til_emne_1()  # Add to Emne.emne

e = Emne.legg_til_emne_2()
emne.append(e)
0 голосов
/ 29 марта 2019

Если, выбрав имя, вы имеете в виду свой атрибут fagKode, вам нужно:

fagKode = input('Enter code: ')
Emne(fagKode)

Вы добавляете экземпляры Enme в список в конструкторе, поэтому вы не делаетенужно сохранить их в переменную.

Кроме того, вы можете справиться с этим в функции:

 emne=[]
 class Emne:

    def __init__(self,fagKode):
        self.fagKode = fagKode
        self.karakter = ""        


    def leggTilEmne():
        nyttEmne = input("test:")
        enme.append(Emne(nyttEmne))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...