2015-10-25 157 views
-1

我有以下类,它有两个类变量“值”和“渐变”。我将两个值分配给类变量,然后将其打印出来。但是,我将20赋给一个不存在的类变量(“限制”)。但编译器很高兴,似乎存储变量。这怎么可能? 我的假设是,如果变量名称不正确,我应该看到一条错误消息。我不应该吗?为类变量赋值python

class wire: 
    def __init__(self,value,gradient): 
     self.value  = value 
     self.gradient = gradient 

XX = wire(10,0.05) 
print XX.value , XX.gradient 

XX.limit = 20 
print XX.value , XX.gradient, XX.limit 

感谢您的帮助

+1

您正在分配*实例*属性,而不是类属性。不,Python不会限制这一点,这是完全正常的行为。 –

+0

这是非法的任何其他面向对象语言或我梦想? – spgt

+1

不要将打字模型与编程范例混淆。 C++和Java可能会使其非法,但其他语言不会。 Python是一种[动态语言](https://en.wikipedia.org/wiki/Dynamic_programming_language),您在这里想到静态语言。 –

回答

0

这些实例变量,而不是类变量。

但我不知道你为什么期望出现错误。在__init__或其他地方定义这些属性没有区别。无论哪种方式,您都要向该实例添加新的属性。

+0

嗨,丹尼尔,感谢您的澄清,我们可以在任何其他OO语言中做同样的事情吗?或者是这个python的东西?我没有很多OO语言的经验 – spgt

+0

正如Martijn所说,这很大程度上取决于语言。 Java是静态类型的,所以包含类的所有变量都需要首先声明。除非你定义了访问器,否则Ruby会阻止所有对类外部属性的访问,但是你可以在类中任何你喜欢的地方定义它们,而不仅仅是在初始化器中。等等。 –