在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

回到顶部