java变量与python变量的区别_Java和Python对静态变量的不同术语?[复制品]

我有一个关于赋值时类变量作用域持久性的问题。

我有一个字典作为一个类变量,当我在实例方法中为变量分配另一个字典时,范围似乎会丢失,并且值不再在实例之间持久化。

下面是代码片段:

class MyBaseClass(object):

my_class_dict = {}

def __init__(self):

print "Keys length: ", len(self.my_class_dict)

if not len(self.my_class_dict.keys()):

print "Initializing my_class_dict."

# VERION 1

# self.my_class_dict.update({1:2})

# VERSION 2

# self.my_class_dict = {1:2}

# VERSION 3

self.my_class_dict[1] = 2

class MyChildClass1(MyBaseClass):

def __init__(self):

super(MyChildClass1, self).__init__()

class MyChildClass2(MyBaseClass):

def __init__(self):

super(MyChildClass2, self).__init__()

if __name__=='__main__':

child_1 = MyChildClass1()

child_2 = MyChildClass2()

print child_1.my_class_dict

print child_2.my_class_dict

结果如下。

版本1(1初始化,作用域持久化)

Keys length: 0

Initializing my_class_dict.

Keys length: 1

{1: 2}

{1: 2}

版本2(2次初始化,范围丢失)

Keys length: 0

Initializing my_class_dict.

Keys length: 0

Initializing my_class_dict.

{1: 2}

{1: 2}

版本3(1初始化,作用域持久化)

密钥长度:0

正在初始化我的类。

按键长度:1

{1:2 }

{1:2 }

因此,看起来作用域只在完全对象分配时丢失。为什么会这样?这样做的理由是什么?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值