设置/重置在\uuuu init\uuuuuuu中声明和初始化的变量值__

2024-04-18 10:05:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我想设置/重置我在maininit中初始化的变量的值。我有以下代码

class myClass:

    def myfun(self):

       # code using the url

    def __init__(self):
        self.url = None

if __name__ == '__main__':

   # list of integers
   my_list = [1, 2, 3,4,5]
   count = 0

   for item in my_list:
       if count % 2 == 0:
           self.url = "http://myurl.com" # I want to set/reset my url here

我收到了这个错误:

NameError: name 'self' is not defined`

如何设置/重置我的变量,以便以后在类的所有方法中全局使用


Tags: 代码nameselfurlifinitmainmy
3条回答

您需要实例化类,并使用此名称来引用类,而不是self。像这样:

class myClass:

    def myfun(self):
        pass
       # code using the url

    def __init__(self):
        self.url = None

if __name__ == '__main__':

   # list of integers
   my_list = [1, 2, 3,4,5]
   count = 0
   obj = myClass() # HERE!
   for item in my_list:
       if count % 2 == 0:
           obj.url = "http://myurl.com"

实例化类(或您给它起的任何其他名称)后,需要将其引用为obj。如果你不实例化一个类,它只是一个具有预定义属性和行为的框架,但它还不存在。在实例化之前不能对其进行操作

在实例化之后,您可以使用实例名obj引用它^类中的{}引用自身,无论实例化时调用什么。因此,在类之外,不能使用self

导入保护if __name__ == '__main__':和其中的所有内容都在全局命名空间中。它不是类的一部分,更不是类中的一个方法。要拥有类的实例,您需要实例化它:

my_obj = myClass()

现在,在同一名称空间中,您可以

my_obj.url = ...

my_obj.myfun()

我想你需要一个类变量

that can be used globally later on in all the methods of my class

当您使用self.url时,如果实例中没有url属性,它将引用类变量。它由所有实例共享。如果在某些实例上定义self.url,则它们的self.url将被隐藏

class MyClass:
    url = None

    def my_fun(self):
        print(self.url)
        # code using the url


if __name__ == '__main__':

    # list of integers
    my_list = [1, 2, 3, 4, 5]
    count = 0
    my_object = MyClass()

    for item in my_list:
        if count % 2 == 0:
            MyClass.url = "http://myurl.com"  # I want to set/reset my url here
            my_object.my_fun()

相关问题 更多 >