Создайте экземпляр класса и переименуйте его на основе пользовательского ввода - PullRequest
0 голосов
/ 13 мая 2018

Я создал (несколько) разговорного бота и хочу, чтобы он мог создавать модель людей, чьи имена он слышит. Я хочу сделать это, создав для него новый экземпляр моего «персонального» класса, и этот экземпляр класса будет назван как этот человек (как у Боба, Алисы и т. Д.), Где я был всю ночь, думал, что это потому, что он сказал, что я создал экземпляр, но при попытке сослаться на указанный экземпляр класса, он говорит мне, что имя 'Bob' не определено:

properNouns = [word for word,pos in taggedSent if pos == 'NNP']

if properNouns:
    npn = str(properNouns)
    print(npn)    # ['Bob']
    npn = re.sub('[\[\]\,\']', '', npn)
    print(npn)    # Bob
    newPerson = Self(npn,'','','','','','','','','','','','','','')  # Put "Bob" as the fName
    newPerson.__name__ = npn  # Change the instance name to "Bob" (well, try anyway)
    print(str(newPerson.__name__) + " was created!")   # Bob was created!
    print(Bob.fName + " is the first name")  # NameError:  name 'Bob' is not defined

Мой базовый класс выглядит следующим образом:

class Self():     # A starter concept of a Host's concept of Self/Me
    def __init__(self, fName, lName, DoB, job, hColor, eColor, sex, homeTown, homeState, whatIHave):
        self.fName = fName
        self.lName = lName
        self.DoB = DoB
        self.job = job
        self.hColor = hColor
        self.eColor = eColor
        self.sex = sex
        self.homeTown = homeTown
        self.homeState = homeState
        self.whatIHave = whatIHave
    def getFullName(self):
        fullName = str(self.fName) + ' ' + str(self.lName)
        return fullName.title()

Я могу успешно создать экземпляр вручную и впоследствии вызывать его атрибуты с помощью точечной нотации, если я заранее жестко закодировал его, но это не то, как это должно работать (если в разговоре я скажу, что встретился с Бобом, я нужен бот для создания нового экземпляра класса Self с именем Bob.)

mySelf = Self('Bob','Jones',"Coder",'19730101',black','brown','F','Boston','Massachusetts','a Jeep Wrangler')

И если впоследствии я напечатаю Bob.fName, я получу Боба ...

Я могу сделать довольно приличное кодирование, но это для меня относительно новая область, и может быть, я видел ответ, но просто не понимаю, что вижу достаточно хорошо, чтобы понять, что это такое. Мне нужно, поэтому извинения. Я видел много постов с очень похожими заголовками, но они, кажется, не имеют ответа на то, что я собираюсь сделать здесь, что мне кажется простым: если я создаю новое «Self» (newSelf = Self), то Я хочу переименовать newSelf в «Bob».

В качестве альтернативы, и я бы подумал проще, было бы создать новое «Я» с правильным именем для начала, но я не могу найти способ взять переменную, содержащую имя, и сделать это имя = новым «Я». ..

Спасибо за вашу помощь. Я занимаюсь этим более шести часов.

...