python - Python 2.7 中的子类

标签 python subclass

我正在尝试做一些我认为在面向对象编程中非常普通的事情 但找不到有关 Python 2.7 的任何文档 我想创建一个父类(super class)的子类,当我完成后 父类(super class) 绑定(bind)到父类(super class) superclass.subclass 绑定(bind)到子类并且 子类不绑定(bind)任何内容。 这是我能想到的最佳解决方案:

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

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

class superclass:
  class subclass:
    pass

几乎做了正确的事情,子类实际上并没有从父类(super class)继承。 如果我尝试这样做:

class superclass:
  class subclass(superclass):
    pass

我收到一条错误消息,表明父类(super class)未绑定(bind)。

最佳答案

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

class Superclass(object):
    pass

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

其中字典参数包含任何方法。我认为没有一个很好的方法来使用 class 来做到这一点语法,但这实际上只是调用 type 的语法糖。无论如何。

您不必将方法定义为 lambda s;它们可以是 def 的普通函数只要他们有 self争论。不过,如果您这样做,您可能会想隐藏它们的定义......

关于python - Python 2.7 中的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10222089/

相关文章:

python - 如何继承 ABCMeta

java - 子类/父类(super class)字段的最佳实践

python - 实现自定义 pretty-print 的最佳方法

c# - 私有(private)构造函数,子类化和密封

Python str 子类表示一个不是真正字符串的值

python - 在Elasticsearch中删除嵌套数组

python - 无法弄清楚如何停止返回列表内的列表(leetcode问题)

python - 如何根据停止标准对排序的 DataFrame 进行分组?

python - 从 skrules 导入 SkopeRules 导入错误 : cannot import name 'six'

javascript - Node JS 中 python 中的 auth 等价于什么?