在Python中,Derived类可以截断为基类吗?
我惊讶于它似乎没有文件说明如何在Python中将派生类截断为基类。 在Python中,Derived类可以截断为基类吗?
实际上,它可能用得较少。但我现在面临的问题AA:
简体:
基类
class Base(object): def __init__(self):
self.a = 10
和派生类:
class Derived(Base): def __init__(self):
super(Derived, self).__init__()
self.b = 10
现在,在某些情况下,我需要合并数据可能是Derived和Base,而只保留数据字段在Base,所以我需要一个方法来截断Derived到基地,但我什么也没找到。
我试图在Base和Derived中创建一个get_base
方法,并让它返回基地派生于super(Derived, self).get_base()
,但返回的结果仍然是Derived!
我打印基本的__dict__
,发现它只有方法,没有用户定义的属性...
我想知道是否存在一种方式来获得从Derived实例基础的数据字段(截断)?
回答:
我想知道是否存在一个方式来获得Derived实例(截)基本的数据字段?
实例数据不区分它是由基类还是派生类创建(或更改)。无论来源如何,这些属性都保存在同一实例字典中。
>>> c = Derived() >>> vars(c)
{'a': 10, 'b': 10}
这就是说,你可以内省__init __()方法来寻找出他们使用的变量名:
>>> Base.__dict__['__init__'].__code__.co_names ('a',)
>>> Derived.__dict__['__init__'].__code__.co_names
('super', 'Derived', '__init__', 'b')
如果出发点是实例的混合列表,你可以找出通过将每个实例的内容相交的常见属性,然后使用常用属性来查找截短的数据:
instances = [Base(), Derived(), Base(), Derived(), Base()] common_attributes = reduce(set.intersection, map(set, map(vars, instances)))
for inst in instances:
print {attr: getattr(inst, attr) for attr in common_attributes}
以上是 在Python中,Derived类可以截断为基类吗? 的全部内容, 来源链接: utcz.com/qa/260126.html