为什么python允许为同一个类创建不同的属性集?

时间:2013-12-23 18:22:22

标签: python oop

我刚开始使用python,在java中,两个相同类型的不同实例具有不同的值,但它不允许它们具有不同的属性。但是,

class Point:
    pass

p1 = Point()
p1.x = 0
p1.y = 0
p2 = Point()
p2.z = 0
p2.w = 1355135

此代码不会产生任何错误。所以我假设它是一种语言功能。但我不明白为什么python允许两个相同类型的实例具有不同的属性?

它如何帮助设计代码?

3 个答案:

答案 0 :(得分:5)

因为Python是一种动态语言。 Python对象主要是一个dict(包含实例属性)+对基类的引用(也是对象)+一些钩子在基类上查看类属性时它们在实例的dict中不存在。 FWIW你甚至可以在运行时改变对象的类型。

它如何帮助设计代码?好吧,能够在运行时动态添加/替换任意实例和类属性(包括方法)使得生活变得更加容易。

答案 1 :(得分:1)

因为Python是一种动态语言。

JavaScript,例如会做同样的事 (不是说JavaScript与Python非常相似)。

"它如何帮助设计代码?"
它允许程序员更自由,编译器在静态中 为了某种安全感或安全感,语言会带走 但这一般是主观的,有些人更喜欢静态语言 其他人更喜欢动态的。

答案 2 :(得分:1)

  

它如何帮助设计代码?

没有。这是我们为拥有一个完全动态的类系统而付出的代价。这意味着我们不仅不必在某处单独声明成员,例如,我们可以将初始化的部分委托给辅助方法或装饰器。或者甚至可以在运行时完成更多功能的元编程,而无需单独的语言。