Дизайн класса Python с метаклассом

  1. Используя функцию merge, мы можем выбрать переменную левой таблицы или правой таблицы, так же, как мы все знакомы с оператором select в SQL (EX: выберите a. * ... или выберите b. * из .....)
  2. Мы должны добавить дополнительный код, который будет подмножаться из недавно объединенной таблицы. SQL: - select a.* from df1 a inner join df2 b on a.CustomerId=b.CustomerId R: - merge(df1, df2, by.x = "CustomerId", by.y = "CustomerId")[,names(df1)]

То же самое

  • SQL: - select b.* from df1 a inner join df2 b on a.CustomerId=b.CustomerId
  • R: - merge(df1, df2, by.x = "CustomerId", by.y = "CustomerId")[,names(df2)]
1
задан Paradox 24 March 2019 в 05:11
поделиться

1 ответ

Если вы используете python3.6 или более позднюю версию, вы можете сделать это, используя __init_subclass__ , что лично для меня лучше, чем метакласс.

Пример __init_subclass__ основан на описанном сценарии использования:

class Parent:
    def __init_subclass__(cls):
        if not hasattr(cls, 'parameters'):
          raise TypeError(f'Subclass of {cls} does not have a parameters class attribute')

    def __init__(self, **kwargs):
        for param in self.__class__.parameters:
            self.setattr(param, kwargs.get(param))

    def compare(self, other):
        for param in self.__class__.parameters:
            if self.getattr(param) != other.getattr(param):
                return False
        return True


class GoodChild(Parent):
    parameters = ['length', 'height', 'width']


class BadChild(Parent):
    pass

В результате возникает исключение TypeError при создании класса BadChild (не при его создании): [ 119]

TypeError: Subclass of <class '__main__.BadChild'> does not have a parameters class attribute
0
ответ дан salparadise 24 March 2019 в 05:11
поделиться
Другие вопросы по тегам:

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