如果我正确理解您的问题,这在 Python 中没有意义。子类的实例中没有“基础实例”。
一个 Python 实例只是一个东西,它包含一组属性(其中任何一个都可能被它的任何基类设置/修改,或者实际上是从它的任何类之外的代码中设置/修改的)。实际上,可以在运行时更改实例的类,甚至可以将其移植到完全不同的继承层次结构中(这通常不是一个好主意,但它是明确定义的)。无论如何,实例仍然是一个单一的单一对象,它只知道它具有哪些属性以及它是哪个类的实例(实际上这只是一个属性:__class__)。
编辑:如果您想要的是能够在实例上调用被覆盖的方法,那么您可以使用super 来实现,正如 hocl 回答的那样。但是,从您的 cmets 看来,您并没有完全理解 super 正在做什么(这是很自然的,因为它非常复杂)。
super(Date, myObj) 不返回“底层datetime.date”实例,因为没有这样的东西,只有myObj 对象。尽管出于您的目的,这听起来会满足您的需求(您可能会停在这句话上)。
它的作用是 return 是一个围绕 myObj 的神奇包装器,它查找从“后面”Date 开始的方法;即,如果Date 没有覆盖它,它会找到将调用的方法。所以在 this 的情况下,它会找到来自 datetime.date 的所有方法,因为你只进行了单一继承。
一个关键的区别是它支持多重继承。如果有人创建了另一个继承自 Date 的类,并且还通过另一条路径从 datetime.date 继承,那么 super(Date, instanceOfThatClass) 可能实际上不会命中 datetime.date 的方法。这取决于该继承层次结构的详细信息。这实际上是super 设计的情况;它使复杂的多重继承层次结构中的类能够协作地调用彼此的实现,确保每个类只被调用一次,并且以合理的顺序调用(尽管每个最终叶类的顺序可能不同,所以中间的类实际上不知道他们调用的是哪个超类实现)。我的理解是这种复杂的情况不会出现在 C# 中,因此它可以提供一个简单的.base 语法。
我的理解也是(这有点猜测),因为 C# 是静态类型的并且支持从预编译库中定义的类继承,所以当你有类 Sub 继承自类 Base ,在Sub 的一个实例中,确实有一个完整的Base 实例,您可以获取它然后调用方法。这将影响阴影场;我希望(再次,作为一个非 C# 程序员猜测一下)从 Sub 实例获取 Base 实例后,任何直接引用被 Sub 覆盖的 field 都会来自Base 的领域,而不是来自Sub 的领域。
在 Python OTOH 中,没有基实例,并且类不能覆盖字段。如果Date 和datetime.date 的构造函数和方法都引用同一个字段,那么这只是它们共享的实例中的一个字段。因此,使用 super 不会改变您将访问的字段,如果您将其视为获取基本实例,您可能会期望它。
鉴于您没有使用复杂的多重继承情况,如果您想要一个简单的语法,您实际上可以直接调用Date.__lt__(myObj, otherObj),尽管它看起来很丑,因为您在这样做时不会使用中缀运算符语法就这样。如果您正在考虑普通方法,那就没那么可怕了;在这种情况下,它可能比使用super 更简单。
带回家的信息:我很确定super(Date, myObj) 是您在这种情况下想要的。但是,如果您遇到更复杂的情况,您不想像在 C# 中那样将super 视为获取“基本实例”的方式。这种理解会让你在多重继承中感到困惑(无论如何这可能会让你感到困惑),而且当你在继承层次结构中有多个层使用相同的字段时也是如此。