Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何格式化Python中用于方法的字符串?_Python_Methods_Format - Fatal编程技术网

如何格式化Python中用于方法的字符串?

如何格式化Python中用于方法的字符串?,python,methods,format,Python,Methods,Format,当尝试运行listPersons()命令时,每个人/实例都应该调用sayHello()方法。但是由于名称是str,它将引发AttributeError(见下文) 如何设置名称格式,以便对其使用方法 class person: def __init__ (self, name): self.name = name def sayHello(self): print("Hello World, I'm", self.name) def listPer

当尝试运行listPersons()命令时,每个人/实例都应该调用sayHello()方法。但是由于名称是str,它将引发AttributeError(见下文)

如何设置名称格式,以便对其使用方法

class person:
    def __init__ (self, name):
        self.name = name
    def sayHello(self):
        print("Hello World, I'm", self.name)

def listPersons():
    print ("There are", len(names), "persons here, please everybody say hello to the world!")

    for name in names:
        print(name.sayHello())

names = ["Tobias", "Lukas", "Alex", "Hannah"]

for name in names:
    globals()[name]  = person(name)
属性错误:

Traceback (most recent call last):
File "<pyshell#97>", line 1, in <module>
listPersons()
File "/Users/user/Desktop/test.py", line 12, in listPersons
print(name.sayHello())
AttributeError: 'str' object has no attribute 'sayHello'
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
名单人员()
文件“/Users/user/Desktop/test.py”,第12行,在listPersons中
打印(name.sayHello())
AttributeError:“str”对象没有属性“sayHello”

非常感谢您的帮助!:-)

出现此错误是因为名称列表是字符串列表,而不是您创建的人员对象。由于您使用的是globals(),因此每个人都被分配到全局范围中的一个变量。与使用globals()不同,我建议创建一个人员列表

您将遇到的另一个问题是,您正在尝试打印person.sayHello的输出,但这不会返回任何内容。你可以直接调用这个函数

这两项变化同时发生:

class person:
    def __init__ (self, name):
        self.name = name
    def sayHello(self):
        print("Hello World, I'm", self.name)

def listPersons():
    print ("There are", len(people), "persons here, please everybody say hello to the world!")

    for name in people:
        name.sayHello()

names = ["Tobias", "Lukas", "Alex", "Hannah"]
people = []

for name in names:
    people.append(person(name))

出现此错误是因为名称列表是字符串列表,而不是您创建的人员对象。由于您使用的是globals(),因此每个人都被分配到全局范围中的一个变量。与使用globals()不同,我建议创建一个人员列表

您将遇到的另一个问题是,您正在尝试打印person.sayHello的输出,但这不会返回任何内容。你可以直接调用这个函数

这两项变化同时发生:

class person:
    def __init__ (self, name):
        self.name = name
    def sayHello(self):
        print("Hello World, I'm", self.name)

def listPersons():
    print ("There are", len(people), "persons here, please everybody say hello to the world!")

    for name in people:
        name.sayHello()

names = ["Tobias", "Lukas", "Alex", "Hannah"]
people = []

for name in names:
    people.append(person(name))

我复制粘贴了这段代码,但在Python2和3I复制粘贴了这段代码,在Python2和3I复制粘贴了这段代码,但在Python2和3I复制粘贴了这段代码,但在Python2和3I复制粘贴了这段代码,但在Python2和3I复制粘贴了这段代码后都没有出现错误,谢谢您的回答和解释!但是,有没有一种方法可以以我仍然可以调用Tobias.sayHello()的方式创建实例?通过在people.append(person(name)):globals()[people[I].name]=people[I]之后添加以下行来解决此问题!这是一种有效的解决方法吗?我建议不要使用globals,因为它是一种创建或访问变量的循环方式。如果我看到Tobias.sayHello(),我希望看到像Tobias=person(“Tobias”)这样的行。以这种方式使用globals()会降低代码的可读性,这可能会导致出现其他错误。例如,如果名称列表中有一个值“person”,该怎么办。我建议的另一种选择是将这些人存储在字典中。比如people={},然后people[name]=person(name)。然后你就可以做“Tobias”.sayHello().谢谢你的回答和解释!但是,有没有一种方法可以以我仍然可以调用Tobias.sayHello()的方式创建实例?通过在people.append(person(name)):globals()[people[I].name]=people[I]之后添加以下行来解决此问题!这是一种有效的解决方法吗?我建议不要使用globals,因为它是一种创建或访问变量的循环方式。如果我看到Tobias.sayHello(),我希望看到像Tobias=person(“Tobias”)这样的行。以这种方式使用globals()会降低代码的可读性,这可能会导致出现其他错误。例如,如果名称列表中有一个值“person”,该怎么办。我建议的另一种选择是将这些人存储在字典中。比如people={},然后people[name]=person(name)。然后你就可以做“Tobias”.sayHello()。