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()这样的类名来调用它吗