我正在尝试做一些我认为在面向对象编程中非常普通的东西 但是在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
我收到一条错误消息,指出超类是未绑定的。
答案 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 。