创建类的实例并根据用户输入重命名

时间:2018-05-13 03:27:51

标签: python class naming dynamically-generated

我已经创建了一个(某种程度上)会话机器人,我希望它能够创建一个其听到的名字的人的模型。我希望通过创建我的“person”类的新实例来实现这一点,并将该类实例命名为该人(如Bob,Alice等)我整晚都在这里,以为我有因为它说我创建了实例,但是当试图引用该类的实例时,它告诉我'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()

我可以成功手动创建一个实例,然后通过点符号调用其属性,如果我提前对其进行硬编码,但这不是必须如何工作的(如果在对话中我说我遇到了Bob,我需要机器人创建一个名为Bob的Self类的新实例。)

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

如果我随后打印一个Bob.fName,我会得到Bob ....

我可以做一些相当不错的编码,但这对我来说是一个相对较新的领域,也许我已经看到了答案是什么,但根本不明白我看到的东西已经足够了解它是什么我需要,所以道歉。我看过许多帖子都有非常相似的标题,但是他们似乎没有找到我在这里要做的事情的答案,这对我来说似乎很简单:如果我创建一个新的“Self”(newSelf = Self),那么我想将newSelf重命名为“Bob”。

或者,我认为更容易,就是让新的Self以正确的名称创建,但是我找不到一种方法来获取包含名称的变量并使该名称=新的Self。 ..

感谢您的帮助。我现在已经待了六个多小时了。

0 个答案:

没有答案
相关问题