Получить все функции и атрибуты из уже созданного экземпляра родителя в дочернем классе

Вот простой пример

from pandas import DataFrame

# Create data set
d = {'Revenue':[100,111,222], 
     'Cost':[333,444,555]}
df = DataFrame(d)


# mask = Return True when the value in column "Revenue" is equal to 111
mask = df['Revenue'] == 111

print mask

# Result:
# 0    False
# 1     True
# 2    False
# Name: Revenue, dtype: bool


# Select * FROM df WHERE Revenue = 111
df[mask]

# Result:
#    Cost    Revenue
# 1  444     111
0
задан ZheFrench 18 January 2019 в 16:24
поделиться

2 ответа

В методе init () класса CustomGenomicFeature вы можете явно вызывать метод init () класса GenomicFeature, просто вызывая super (). init [ 114] ()

class CustomGenomicFeature(GenomicFeature):

    def __init__(self,genomic_feature,kikou):
        super().__init__(genomic_feature)
        self.kikou=kikou
0
ответ дан BMac413 18 January 2019 в 16:24
поделиться

С __dict __. Update

я бы скорее посоветовал использовать __dict__ вместо super, потому что super не поможет вам скопировать значение атрибутов родительского объекта. Таким образом, вы могли бы сделать что-то вроде этого:

class A():
    def __init__(self):
        self.x = 1

class B(A):
    def __init__(self, a):
        super(B, self).__init__()
        self.__dict__.update(a.__dict__)

a = A()
b = B(a)

print(b.x)  # displays '1'

a.x = 3
b2 = B(a)

print(b2.x)  # displays '3'. Without the __dict__update, it would return '1'

Таким образом, вы установите каждый атрибут, который есть у вашего родительского класса, без изменения атрибутов дочернего класса, которых нет у родителя.

В вашем случае:

class CustomGenomicFeature(GenomicFeature):

    def __init__(self,genomic_feature_instance,kikou):

        super().__init__()
        self.__dict__.update(genomic_feature_instance.__dict__)

        # Subclass-specific stuff follows
        self.kikou=kikou

с композицией

Другим способом (и, возможно, более чистым) будет использование композиции вместо наследования:

]
class CustomGenomicFeature(GenomicFeature):

    def __init__(self,genomic_feature_instance,kikou):

        # keep ref to the genomic_feature_instance
        self._genomic_feature = genomic_feature_instance

        # Subclass-specific stuff follows
        self.kikou=kikou

    @property
    def name(self):
        return self._genomic_feature.name

Подробнее:

0
ответ дан olinox14 18 January 2019 в 16:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: