python类self和__init __

时间:2015-11-24 11:37:58

标签: 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))
        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的其他问题,但它已经超出了我的想法。

2 个答案:

答案 0 :(得分:3)

我想你试着这样做:

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.__init__并保留在self.data的内存中。然后,您可以调用其方法my_object.generate_location(),它可以使用self.data

self仅在课堂内使用 - 就像字memymy.data)。

答案 1 :(得分:1)

self.data.GenerateLocation(self)真的很奇怪,不清楚你在这里想做什么。如果您正在创建类,那么您似乎想要即时创建它,即创建该类的对象。为此,您必须调用构造函数。在你的情况下,它将是(从@ furas的答案复制)

my_object = Add()

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

my_object.generate_location()

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

有关详细信息,请参阅官方教程:python 2python 3