我定义了两个类,如下所示:
class ClassModel(object):
pass
class FunctionModel(object):
attr = None
def __call__(self):
return self.attr
其思想是创建ClassModel
的几个副本,每个副本包含从FunctionModel
继承的零个或多个方法,每个方法都应该有自己的属性。你知道吗
我可以创建ClassModel
和FunctionModel
的子级。但是我没有成功地附加这两个对象,因此当ClassModel
的子对象被实例化时,Python会将从FunctionModel
派生的类函数对象识别为它们的方法。你知道吗
看看会发生什么
>>> func = type('func', (FunctionModel,), {'attr': 'someattr'})
>>> func_inst = func()
>>> func_inst
<__main__.func object at 0x968e4ac>
>>> Cls = type('Cls', (ClassModel,), {'func_inst': func_inst})
>>> cls_inst = Cls()
>>> cls_inst.func_inst
<__main__.func object at 0x968e4ac>
我怎么能接受这个?你知道吗
考虑使用元类, 举个例子:
一旦所有这些都定义好了,获取新类就是一个小游戏。。。你知道吗
我在这里可能完全错了,但您肯定只希望
FunctionModel
成为ClassModel
的父类?你知道吗现在
ClassModel
将拥有FunctionModel
的所有属性,但要小心过度使用的东西。为ClassModel
创建__init__
方法时,可以确保也使用super()
调用FunctionModel
s__init__
有关python类和继承here的更多信息。你知道吗
我终于想出办法了。类方法是在创建新的类对象之后添加的(这并不是我想要的),而是在它实际实例化之前添加的。由于
setattr
,方法的名称可以动态更改。你知道吗定义类并添加属性:
并举例说明:
相关问题 更多 >
编程相关推荐