我需要一些帮助来生成对象的实例。
假设我有一个从NewPerson创建的对象,但我没有说出名字 在参数内如:
dave = NewPerson()
我想使用我的generate_name函数生成一个随机名称。这是我当前的代码,但我收到错误:NameError:name' generate_name'未定义
class NewPerson(object):
def __init__(self, name = generate_name()):
self.name = name
self.age = 0
def set_name(self,name):
self.name = name
def get_name(self):
return (self.name)
def generate_name(self):
self.name = Generator.get_full_name()
答案 0 :(得分:2)
import random
和generate_name
函数是因为我不知道你的Generate
班级做了什么
import random #just for a quick generate random name thing
class NewPerson(object):
def __init__(self, name = fart_knock()):
#this entire if/else block is equivilant to "self.name = name or self.generate_name()", thanks troolee
if name == None:
self.name = self.generate_name()
else:
self.name = name
self.age = 0
def generate_name(self):
#because i have no idea how your Generator class works
return str(random.randrange(9999))
你的工作不正常,因为你试图将类中的一个函数分配到 init 方法中。在创建之前它不知道它是什么。 (即使它确实如此,它会做一次,每个随机名称都是完全相同的)
同样在调用类中的方法时,在类内部,您需要将其称为self.generate_name()
,而不仅仅是generate_name()
答案 1 :(得分:1)
首先,要调用实例上的函数,需要在self
前面加上它们:
self.generate_name()
其次,如果你将generate_name
调用放在函数头中,那么在定义函数时它将被称为,而不是再次 - 所以你将拥有一个&# #34;随机"默认名称。
第三,如果你真的想要这种行为,你必须先定义generate_name
,然后关闭self
(当你调用它时和定义它时):
class NewPerson(object):
def generate_name():
blahblah
def __init__(self, name=generate_name()):
blahblah
这使得generate_name
一旦完成构建类就会失效,除非你添加类似的东西:
generate_name = staticmethod(generate_name)
走向全班的底层。
答案 2 :(得分:1)
这里有几个问题:
(1)在声明类之后需要缩进 - 在本例中是所有成员函数定义
(2)由于缩进问题,您不清楚是否需要' generate_name'成为NewPerson类的成员函数,或者如果您希望它是一个独立的函数。 如果你不希望它在课堂内,那么只需将其定义移到之前 NewPerson的定义,一切都应该正常工作:
def generate_name():
[code here]
class NewPerson(object):
[code here]
另一方面,如果你想让generate_name成为NewPerson的成员函数,那么你不能做你正在尝试的事情,但是一个简单的修复就像下面这样(注意缩进):
def NewPerson(object):
def __init__(self, name = None):
if name == None:
self.name = self.generate_name()
else:
self.name = name
def generate_name(self):
[code here]
外卖消息是你需要使用缩进来告诉Python哪些代码与哪些代码一起使用。这些被称为代码块,在其他语言中,它们可能会被{}等运算符处理,但在Python中,缩进是正确的,因为这标记了代码块!