python使用__init__与仅在类中定义变量-有什么区别吗?

丹尼伯

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

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

class Dawg:


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

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

    def finish( self ):
        #...

代替这个:

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

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

    def finish( self ):
        #...

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

四人

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

例如,

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

由于变量是类变量,因此is运算符的取值为True但是,对于实例变量,

class TestClass(object):
    def __init__(self, value):
        self.variable = value

var_1, var_2 = TestClass(1), TestClass(2)
print var_1.variable is var_2.variable
# False
print TestClass.variable is var_1.variable
# AttributeError: type object 'TestClass' has no attribute 'variable'

而且,您不能仅使用类名来访问实例变量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Swift:用'!'定义函数参数有什么区别吗?

屏幕中的nohup和nohup有什么区别吗?

java和c中的for循环有什么区别吗?

lambda函数中[=]和[&]之间有什么区别吗?

在GridView中使用DynamicHyperLink或LinkButton有什么区别吗?

在Cython类中,使用__init__和__cinit__有什么区别?

使用 getValue 和数组值位置 (GAS) 在变量中获取值有什么区别吗?

在 __init__ 内部或外部的类中实例化一个类有什么区别?

使用和不使用 __init__() 的正确参数创建类的实例有什么区别?

使用构造函数初始化类实例与赋值之间有什么区别吗?

引用对象的变量ID和使用'this'之间有什么区别吗?

在普通的 lisp 中,使用 '#(...) 或仅使用 #(...) 创建向量有什么区别吗?

Python中'A = [...]'和'A [:] = [...]'的空间复杂度之间有什么区别吗?

Python中的“字符串”和“字符串”之间有什么区别吗?

在Redux中-使用store.dispatch()和dispatch()有什么区别吗?

在NestJS中创建动态模块时,使用`forRoot`或`register`有什么区别吗?

在Avro中,在GenericRecord上调用toString()与使用JSONEncoder之间有什么区别吗?

两个呈现的类之间有什么区别?它们的工作方式不同吗?

清除字符串变量内容的不同方法之间有什么区别吗?

hibernate中FROM和SELECT子句有什么区别,在结果方面有语义上的区别吗?

使用Cat 6墙壁插孔与使用母对母连接器有什么区别吗?

使用“或”运算符和使用多个子句之间有什么区别吗?

使用/不使用MethodInvoker进行BeginInvoke-有什么区别吗?

变量和参数有什么区别

Python列表切片[-1:]和[-1]有什么区别吗?

在 Ubuntu 或 python 虚拟环境上安装 Apache SuperSet 有什么区别吗?

EasyMock中的“ .andReturn(...)。anyTimes()”和“ .andStubReturn(...)”之间有什么区别吗?

Saltja的Jinja中的“ json”和“ tojson”过滤器之间有什么区别吗?

Eclipse 中的这两个 JVM 设置有什么区别吗?