Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 类变量实例化过程_Python - Fatal编程技术网

Python 类变量实例化过程

Python 类变量实例化过程,python,Python,如图所示: 我不明白Python是如何初始化一个类变量的,为什么我创建了两个类对象,但这两个类的类变量的值是相同的 谢谢您的帮助。您应该在初始化(init)方法中使用now=datetime.now(),如下所示: class A(object): def __init__(self): self.now = datetime.now() def p(self): print(self.now) 在您的代码中,该方法仅在类首次初始化时调用,而不

如图所示:

我不明白Python是如何初始化一个类变量的,为什么我创建了两个类对象,但这两个类的类变量的值是相同的


谢谢您的帮助。

您应该在初始化(init)方法中使用now=datetime.now(),如下所示:

class A(object):
    def __init__(self):
        self.now = datetime.now()
    def p(self):
        print(self.now)

在您的代码中,该方法仅在类首次初始化时调用,而不是在定义对象时调用。

@Mike Scotty的评论是正确的,但为了清晰起见需要扩展

当变量设置为不带self时。在类主体的前面是类变量,它们在类的所有实例中都具有相同的值。如果需要依赖实例的变量,则需要在方法中初始化它们,最好是init,并在名称前面加上“self”

因此,您的类定义应为:

class A(object):
    def __init__(self):
        self.now = datetime.now()
    def p(self):
        print(self.now)

因为它是一个
变量,而不是
实例
变量。你应该使用代码格式而不是图片来发布代码。我明白你的意思。非常感谢。此外,我想确认类变量是在定义类时初始化的,而不是在创建类对象时初始化的。是吗?@kevinwong python.org上的那些家伙在写作方面非常出色,你应该给他们一个机会。@kevinwong取决于你所指的变量。在创建实例时,需要初始化实例变量。其他变量是什么?当创建一个实例时,会发生两件事:第一件事是创建一个新的实例指针,第二件事是调用类的init并遵守其中的所有代码。因此,这取决于类变量的设置位置。
class A(object):
    def __init__(self):
        self.now = datetime.now()
    def p(self):
        print(self.now)