Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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 unittest testcase设置新对象_Python_Eclipse_Class_Pydev_Instantiation - Fatal编程技术网

Python unittest testcase设置新对象

Python unittest testcase设置新对象,python,eclipse,class,pydev,instantiation,Python,Eclipse,Class,Pydev,Instantiation,我在经典的Eclipse4.2.2和Python2.7中使用pydev。请阅读下面的代码和结果。 假设我创建了一个具有预定义值的变量的对象。现在,假设我更改此值并创建一个同名的新对象(即,旧名称指向新对象)。我希望旧名称指向一个新对象,该对象的值与类定义中给定的预定义值没有差异。事实并非如此。有什么关于原因的建议吗 代码: 返回: New object: <__main__.example object at 0x0478C430> New object's dict: {'A'

我在经典的Eclipse4.2.2和Python2.7中使用pydev。请阅读下面的代码和结果。 假设我创建了一个具有预定义值的变量的对象。现在,假设我更改此值并创建一个同名的新对象(即,旧名称指向新对象)。我希望旧名称指向一个新对象,该对象的值与类定义中给定的预定义值没有差异。事实并非如此。有什么关于原因的建议吗

代码:

返回:

New object: <__main__.example object at 0x0478C430> 
New object's dict:  {'A': 0} Old object's dict:  {'A': 5} 
New object: <__main__.example object at 0x0478C450> 
New object's dict:  {'A': 5}
新对象:
新对象的dict:{'A':0}旧对象的dict:{'A':5}
新对象:
新对象的dict:{'A':5}

您正在将属性定义为类变量。类变量将在类的所有实例之间共享。您可以将其视为其他语言的静态属性

您需要将其定义为实例变量,方法如下:

class example(object):

    def __init__(self):
        self.veryImportantDict = {'A': 0}

    def set_veryImportantNumber(self,key,val):
        self.veryImportantDict[key] = val 
另外,在真正需要setter或getter方法之前,不应该定义它们。如果以后发现有必要,可以使用Python来改变这种行为,这样可以避免访问方法的膨胀,直接访问属性,如下所示:

class example(object):

    def __init__(self):
        self.veryImportantDict = {'A': 0}

test.veryImportantDict['A'] = 'foo'

通过在类定义中声明
veryImportantDict
,可以将其作为类变量。您需要的是创建一个实例变量。为此,您只需在构造函数中声明它


您可以这样想:类声明本身就是一个对象
veryImportantDict
是该对象的成员。如果更改其值,则更改类的定义。因此,下次从该类创建对象时,它将具有新值。如果改为在构造函数中设置值,则它将仅是该对象的成员

除非我将输出作为代码块处理,否则它不会让我发布,但事实并非如此。非常感谢。我忘了给帖子命名(它默认为我最初想到的关键词),这一事实并没有吓倒你!
class example(object):

    def __init__(self):
        self.veryImportantDict = {'A': 0}

test.veryImportantDict['A'] = 'foo'