我很抱歉没有给这个问题一个更好的标题;我发布它的原因是我什至没有正确的术语来知道我在寻找什么。
我已经定义了一个具有“垃圾邮件”属性的类:
def SpamClass(对象): def __init__(self, arg): self.spam = arg def __str__(self): 返回 self.spam
我想创建一个(子/兄弟?)类,它具有完全相同的功能,但具有名为“eggs”而不是“spam”的属性:
def EggsClass(对象): def __init__(self, arg): self.eggs = arg def __str__(self): 返回self.eggs
概括地说,如何创建具有任意属性名称的功能相同的类?当类具有复杂的行为时,重复代码似乎很愚蠢。
更新:我同意这闻起来像是糟糕的设计。澄清一下,我并不是想以这种愚蠢的方式解决特定问题。我只想知道如何__dict__
在保留功能的同时任意命名对象的(非魔法)内容。考虑类似对象的keys()
方法dict
。人们使用符合约定的方法创建各种类,keys()
命名约定是一件好事。但是这个名字是随意的。如何在不手动替换源中的 /keys/spam/ 的情况下使用spam()
完全替换的方法创建一个类?keys()
重载__getattr__
和朋友引用泛型属性对我来说似乎不优雅和脆弱。如果子类重新实现这些方法,它必须适应这种行为。我宁愿让用户觉得只有一个带有命名属性的基类,可以天真地访问。
实际上,我可以想到一个合理的用例。假设您想要一个具有特殊属性的 mixin 类和一些密切相关的方法来操作或依赖于该属性。用户可能希望在重用底层行为的同时,为不同的类以不同的方式命名这个特殊属性(以匹配实际问题域中的名称或避免名称冲突)。