【问题标题】:assigning a value to a class variable python为类变量python赋值
【发布时间】:2016-01-24 12:48:01
【问题描述】:

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

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

感谢您的帮助

【问题讨论】:

  • 您正在分配给 instance 属性,而不是类属性。不,Python 不限制这一点,这是完全正常的行为。
  • 这在任何其他 OO 语言中是非法的还是我在做梦?
  • 不要将类型模型与编程范式混淆。 C++ 和 Java 可能会使其非法,但其他语言不会。 Python 是一个dynamic language,你在这里考虑的是静态语言。

标签: python class variables variable-assignment


【解决方案1】:

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

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

【讨论】:

  • 嗨,Daniel,感谢您的澄清,我们可以用任何其他 OO 语言做同样的事情吗?或者这是python的东西?我在 OO 语言方面没有很多经验
  • 正如 Martijn 所说,这在很大程度上取决于语言。 Java 是静态类型的,因此需要首先声明所有变量,包括类上的变量。除非您定义访​​问器,否则 Ruby 会阻止从类外部对属性的所有访问,但是您可以在类内部的任何位置定义它们,而不仅仅是在初始化程序中。以此类推。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多