【问题标题】:How to make a parent class object referring to a child class?如何使父类对象引用子类?
【发布时间】:2020-04-27 17:47:24
【问题描述】:

就像在 java 或 C# 中我们可以创建类似的对象

Account obj = new SavingsAccount();

其中Account 是父类,SavingsAccount 是子类

我如何用 python 做同样的事情?

基本上我想做的是这个 https://repl.it/@MushfiqurRahma1/Polymorphic-Object

【问题讨论】:

  • “子类”是什么意思?
  • 扩展其继承类属性的类
  • ...您尝试了哪些方法,但没有成功?
  • 仅供参考,它们被称为子类或派生类。另外,请在您的问题中发布您的代码,

标签: python class oop parent-child


【解决方案1】:

Python 是动态类型的:名称引用对象时不涉及任何类型的概念。你只是有

>>> class Account: pass
...
>>> class SavingsAccount(Account): pass
...
>>> obj = SavingsAccount()

每个对象都存储一个对其自身类型的引用

>>> type(obj)
<class '__main__.SavingsAccount'>

每种类型都有一个指向其方法解析顺序 (MRO) 的引用

>>> type(obj).__mro__
(<class '__main__.SavingsAccount'>, <class '__main__.Account'>, <class 'object'>)

实例属性不会根据“定义”它们的类来“划分”;每个属性只存在于实例本身上,不引用任何特定的类。

方法只存在于类本身中;当调用obj.foo() 时,MRO 用于确定使用谁的定义。

【讨论】:

    【解决方案2】:

    Python 使用 Duck 类型,这意味着您不应该真正关心作业左侧的类。只需实例化 Child 类,您应该已经能够使用它的父“接口”来执行动态方法调用等操作。

    【讨论】:

      【解决方案3】:

      Python 是一种松散类型的语言。这意味着您不必指定变量类型。你可以这样做:

      class Account():
          def deposit():
              pass
      class SavingsAccount(Account):
          pass
      
      obj = SavingsAccount()
      obj.deposit(20)
      

      编辑:正如chepner 指出的那样:Python is strongly typed, but also dynamically typed: type is associated with an object, not the name referring to an object.

      【讨论】:

      • 我不确定您所说的“松散”是什么意思。 Python 是强类型的,但也是动态类型的:类型与对象相关联,而不是与对象相关的名称。
      • 我的错,你是对的。将相应地编辑答案。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2016-04-13
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 2016-04-05
      相关资源
      最近更新 更多