【问题标题】:add class members at run-time在运行时添加类成员
【发布时间】:2015-05-11 06:05:59
【问题描述】:

这两个Person的实例有什么区别?

class Person:
    pass

a = Person()
a.name = "Jo"
a.age = 25

print(a.name)

b = Person()
b.surname = "Deshu"
print(b.surname)

ab 是同一类型吗? - 是的。 为什么?他们有不同的成员 aPerson.namePerson.age 属性,b 只有Person.surname

【问题讨论】:

  • 为什么不使用例如type(a) 来了解一下?

标签: python class python-3.x


【解决方案1】:

它们是同一类型。 请注意,在 python 中,继承在静态类型语言中有点不同。

python 使用鸭子类型——也就是说,你不必有一个通用的超类或接口来允许多态——你只需要有相关的方法\属性。

另一方面,具有定义动态字段或方法的能力使得同一类的不同对象具有不同的方法\属性集成为可能。

不要滥用鸭子打字由你决定

python继承与行为继承更相关——从超类继承方法实现。

【讨论】:

    【解决方案2】:

    与模块一样,类具有 Python 的动态特性:它们是在运行时创建的,并且可以在创建后进一步修改。

    您可以查看有关该主题的 python 文档。 https://docs.python.org/2/tutorial/classes.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-25
      • 2017-04-27
      • 1970-01-01
      • 2011-04-22
      • 2022-11-29
      • 1970-01-01
      • 1970-01-01
      • 2018-11-13
      相关资源
      最近更新 更多