Python 2.7中的子类

时间:2012-04-19 05:19:32

标签: python subclass

我正在尝试做一些我认为在面向对象编程中非常普通的东西 但是在Python 2.7上找不到任何关于它的文档 我想创建一个超类的子类,当我完成时 超 绑定到超类 superclass.subclass绑定到子类和 子类被绑定为什么。 这是我能提出的最佳解决方案:

class superclass:
  pass
class subclass(superclass):
  pass
superclass.subclass = subclass
del subclass

有时我希望子类在自己的文件中,有时则不在。 有没有更精确的解决方案,我不必手动执行 最后两行? 虽然

class superclass:
  class subclass:
    pass

几乎是正确的事情,子类实际上并不从超类继承。 如果我试着这样做:

class superclass:
  class subclass(superclass):
    pass

我收到一条错误消息,指出超类是未绑定的。

2 个答案:

答案 0 :(得分:1)

我同意其他所有人的观点,这是一件很愚蠢的事情,我认为你不应该这样做,但为了知识的利益:

class Superclass(object):
    pass

Superclass.Subclass = type('Subclass', (Superclass,), {
    'foo': lambda self: self,
})

其中dictionary参数包含任何方法。我不认为使用class语法有一个很好的方法,但这实际上只是调用type的语法糖。

您不必将方法定义为lambda s;只要它们具有def参数,它们就可以是self的正常函数。如果你这样做,你可能想要隐藏他们的定义,不过......

答案 1 :(得分:1)

这是一个简单的类装饰器来进行引用:

def refer(cls):
    cls.__bases__[0].subclass = cls
    return cls

以下是您使用它的方式:

>>> class Superclass:
        pass

>>> @refer
    class Subclass(SuperClass):
        pass

如果您不想在模块命名空间中使用该名称,则仍需要删除 Subclass