python使用的是yu init_uuvs只是在类中定义变量有什么区别吗?

2024-05-23 22:32:10 发布

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

我是Python新手,只是想更好地理解某些事情背后的逻辑。在

为什么要这样写(默认变量在__init__中):

class Dawg:


    def __init__(self):
        self.previousWord = ""
        self.root = DawgNode()
        self.uncheckedNodes = []
        self.minimizedNodes = {}

    def insert( self, word ):
        #...

    def finish( self ):
        #...

而不是这样:

^{pr2}$

我的意思是-如果我可以轻松地将默认变量直接添加到类中,为什么还需要使用__init__->?在


Tags: selfinitdefroot逻辑事情classword
2条回答

当您在类中创建变量时,它们就是类变量(它们对类的所有对象都是通用的),当您用self.variable_name = value初始化__init__中的变量时,它们是按实例创建的,并称为实例变量。在

例如

class TestClass(object):
    variable = 1

var_1, var_2 = TestClass(), TestClass()
print var_1.variable is var_2.variable
# True
print TestClass.variable is var_1.variable
# True

因为variable是一个类变量,is运算符的计算结果是True。但是,对于实例变量

^{pr2}$

而且不能只使用类名访问实例变量。在

当你写这篇文章时:

class Dawg:
    previousWord = ""
    root = DawgNode()
    uncheckedNodes = []
    minimizedNodes = {}

这些是不是实例变量,它们是变量(意思是:具有相同值的相同变量在类的所有实例之间共享。)另一方面,这:

^{pr2}$

。。。正在声明实例变量,这意味着:类的每个实例的值都不同。正如你所看到的,每一个片段意味着完全不同的东西,你必须选择一个适合你的。提示:大多数时候你对实例变量感兴趣,因为类变量为你的对象定义了一种共享的全局状态,这很容易出错。在

相关问题 更多 >