【发布时间】:2013-02-23 20:07:28
【问题描述】:
假设我有一堂课
class SimpleGenerator(object):
@classmethod
def get_description(cls):
return cls.name
class AdvancedGenerator(SimpleGenerator):
@classmethod
def get_description(cls):
desc = SimpleGenerator.get_description() # this fails
return desc + ' Advanced(tm) ' + cls.adv_feature
现在我已经扩展了上面的每个类,每个都有一个具体的类:
class StringGenerator(SimpleGenerator)
name = 'Generates strings'
def do_something():
pass
class SpaceShuttleGenerator(AdvancedGenerator)
name = 'Generates space shuttles'
adv_feature = ' - builds complicated components'
def do_something():
pass
现在假设我打电话
SpaceShuttleGenerator.get_description()
问题是在AdvancedGenerator 中,我想调用SimpleGenerator 中的方法,并传递一个类的实例,特别是SpaceShuttleGenerator。这个可以吗?
注意:示例已简化,因为我的具体示例涉及更多。假设我的目标不是连接字符串。
【问题讨论】:
-
这是 python 2 还是 3?如果为 2,您是否继承自
object? -
我对您使用子类作为实例感到困惑。它们根本不是一回事。
-
@Martjin:python 2,继承对象。修复示例。
-
@DanielRoseman 具体的
SpaceShuttleGenerator继承自Java中我认为的抽象类AdvancedGenerator,它继承自另一个抽象类SimpleGenerator。 -
@KoliberServices:人力资源管理;谨防使用 Java 类比。 Python is not Java,不要陷入试图将 Java 习语引入 Python 的陷阱。
标签: python superclass class-method