Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.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,今天我在采访中被问到一个问题:“如果我们在类之外定义实例变量,它会显示任何错误吗?” 如果我运行上面的代码,我得到的值是c=20。我来自C++背景,认为这是错误的,但不是……为什么会这样……为什么Python允许创建变量外部类。< /P> < P>在你的例子中, A是类 TEMP的实例。您可以向其添加任何属性。在您可以自己检查的源代码中,它将通过简单的指针操作将此属性添加到此实例。 我认为这是动态语言的关键点,它与C++有很大的不同。 < P>在你的例子中, A/COD>是类 TEMP的实例。您

今天我在采访中被问到一个问题:“如果我们在类之外定义实例变量,它会显示任何错误吗?”


如果我运行上面的代码,我得到的值是c=20。我来自C++背景,认为这是错误的,但不是……为什么会这样……为什么Python允许创建变量外部类。< /P> < P>在你的例子中,<代码> A<代码>是类<代码> TEMP的实例。您可以向其添加任何属性。在您可以自己检查的源代码中,它将通过简单的指针操作将此属性添加到此实例。
我认为这是动态语言的关键点,它与C++有很大的不同。

< P>在你的例子中,<代码> A/COD>是类<代码> TEMP的实例。您可以向其添加任何属性。在您可以自己检查的源代码中,它将通过简单的指针操作将此属性添加到此实例。
我认为这是动态语言的关键点,它与C++有很大的不同。

< P>我推荐在Python文档中阅读。在Python中,实例只是另一种类型的名称空间,在类定义之外定义实例变量只需要在定义实例的名称和值字典中添加一个条目。与C语言相比,C语言中的实例是根据类定义中的模式构造的实际内存块。一旦定义了类,就不能在事实之后插入属性。

我建议阅读上的Python文档。在Python中,实例只是另一种类型的名称空间,在类定义之外定义实例变量只需要在定义实例的名称和值字典中添加一个条目。与C语言相比,C语言中的实例是根据类定义中的模式构造的实际内存块。一旦定义了类,您就不能在事实之后插入属性。

因为您没有采取任何措施来防止这样做。@IgnacioVazquez Abrams您能解释一下吗,在官方Python类教程中有一个向现有类实例添加属性的简单示例,因为您没有采取任何措施阻止这样做。@IgnacioVazquez Abrams可以解释一下吗?FWIW,在官方Python类教程中有一个向现有类实例添加属性的简单示例
class temp():
    a=0
    b=0
    def __init__(self,*args):
        temp.a = args[0]
        temp.b = args[1]
        if len(args)>2 and args[2]:
            print 'extra',args[2]

    def display(self):
        print self.a,self.b,self.c

a = temp(4,9)
b = temp(5,3)
a.c = 20
a.display()