python类self和_init__
我有下面的代码和任何试图创建一个类的代码,该类在列表中生成两个随机数并返回它们python类self和_init__,python,class,init,self,Python,Class,Init,Self,我有下面的代码和任何试图创建一个类的代码,该类在列表中生成两个随机数并返回它们 import random class add : def __init__(self): self.data = [] def GenerateLocation(self): random1 = 10 random2 = 20 self.data.append(random.uniform(-random1 , random1))
import random
class add :
def __init__(self):
self.data = []
def GenerateLocation(self):
random1 = 10
random2 = 20
self.data.append(random.uniform(-random1 , random1))
self.data.append(random.uniform(-random2 , random2))
print(self.data)
self.data.GenerateLocation(self)
我发现第15行中未定义错误self
self.data.GenerateLocation(self)
有人能解释一下吗?我已经看了关于self和init的其他问题,但这超出了我的理解范围。我想你会尝试这样做:
import random
class Add:
def __init__(self):
self.data = []
def generate_location(self):
random1 = 10
random2 = 20
self.data.append(random.uniform(-random1 , random1))
self.data.append(random.uniform(-random2 , random2))
print(self.data)
my_object = Add()
my_object.generate_location()
要使用类,必须创建对象/实例。创建实例python调用Add.\uuu init\uuu
并在内存中为self.data
保留位置。然后您可以调用它的方法my\u object.generate\u location()
,它可以使用self.data
self
仅在课堂内使用-它就像单词me
,my
(my.data
)。我想你应该这样做:
import random
class Add:
def __init__(self):
self.data = []
def generate_location(self):
random1 = 10
random2 = 20
self.data.append(random.uniform(-random1 , random1))
self.data.append(random.uniform(-random2 , random2))
print(self.data)
my_object = Add()
my_object.generate_location()
要使用类,必须创建对象/实例。创建实例python调用Add.\uuu init\uuu
并在内存中为self.data
保留位置。然后您可以调用它的方法my\u object.generate\u location()
,它可以使用self.data
self
仅在类内使用-它就像单词me
,my
(my.data
)。self.data.GenerateLocation(self)这一行非常奇怪,不清楚你想在这里做什么。如果您正在创建该类,则似乎要实例化它,即创建该类的对象。为此,必须调用构造函数。在您的情况下,它将像(从@furas的答案复制)
my_object=Add()
这将创建对象my_object
,它是类Add
的实例。然后可以调用方法生成对象的位置。为此,必须在generate_location()
前面加上对象的名称
my_object.generate_location()
请注意,尽管generate_location
具有参数self
,但此调用中并未明确给出该参数。这是因为Python会将对象my_object
作为第一个参数自动传递(引用)给方法generate_location
,因为它是该对象的方法。(方法是与对象关联的函数,如列表的.append()
)
有关更多详细信息,请参见官方教程:,.行self.data.GenerateLocation(self)
非常奇怪,不清楚您想在这里做什么。如果您正在创建该类,则似乎要实例化它,即创建该类的对象。为此,必须调用构造函数。在您的情况下,它将像(从@furas的答案复制)
my_object=Add()
这将创建对象my_object
,它是类Add
的实例。然后可以调用方法生成对象的位置。为此,必须在generate_location()
前面加上对象的名称
my_object.generate_location()
请注意,尽管generate_location
具有参数self
,但此调用中并未明确给出该参数。这是因为Python会将对象my_object
作为第一个参数自动传递(引用)给方法generate_location
,因为它是该对象的方法。(方法是与对象关联的函数,如列表的.append()
)
有关更多详细信息,请参阅官方教程:,。查看代码缩进。缩进在Python代码中至关重要。代码中的最后一行不是任何方法的一部分。修复该部分时,您将出现其他错误,因为在作为列表对象的self.data
上没有GenerateLocation()
方法。self.data.GenerateLocation(self)是程序的主要部分,您不能从main或其他地方调用方法吗?@Broomer您希望self
是什么,为什么?self
是方法的参数。主程序不是方法,因此那里没有self
。你的意思是创建一个类的实例并调用该类的方法吗?如果是这样,您需要这样做:instance=add()
,add.GenerateLocation()
。在这种情况下,self
参数将由您处理。请查看您的代码缩进。缩进在Python代码中至关重要。代码中的最后一行不是任何方法的一部分。修复该部分时,您将出现其他错误,因为在作为列表对象的self.data
上没有GenerateLocation()
方法。self.data.GenerateLocation(self)是程序的主要部分,您不能从main或其他地方调用方法吗?@Broomer您希望self
是什么,为什么?self
是方法的参数。主程序不是方法,因此那里没有self
。你的意思是创建一个类的实例并调用该类的方法吗?如果是这样,您需要这样做:instance=add()
,add.GenerateLocation()
。在这种情况下,self
参数将由您处理。是的,这正是它应该做的。您能解释一下,与没有init_uu或self并使用诸如Add.generate_ulocation()之类的类名调用它相比,上面的代码为什么是正确的吗是的,这正是它应该做的,你能解释一下为什么上面的代码是正确的,而不是没有init_uu或self,而是使用像Add.generate_ulocation()这样的类名来调用它吗