python class 自己和 __init__

python class self and __init__

我有以下代码和任何试图使 class 在列表中生成两个随机数和 returns 它们

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)

我收到错误 self is not defined in line 15 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()

要使用 class,您必须创建 object/instance。创建实例 python 调用 Add.__init__ 并在内存中为 self.data 保留位置。然后你可以调用它的方法 my_object.generate_location() 它可以使用 self.data.

self 仅在 class 内部使用 - 就像单词 memy (my.data).

self.data.GenerateLocation(self)行真的很奇怪,不清楚你想在这里做什么。如果您正在创建 class,您似乎想要实例化它,即创建那个 class 的对象。为此,您必须调用构造函数。在您的情况下,它就像(从@furas 的回答中复制)

my_object = Add()

这将创建对象 my_object,它是 class Add 的实例。然后你可以调用对象的方法 generate_location 。为此,您必须在 generate_location() 前加上您的对象名称。

my_object.generate_location()

请注意,尽管 generate_location 具有参数 self,但并未在此调用中明确给出。这是因为 Python 会自动将对象 my_object 作为第一个参数传递(引用)给方法 generate_location ,因为它是该对象的方法。 (方法是与对象关联的函数,例如列表的 .append()。)

详见官方教程:python 2, python 3.