Nano Hash - криптовалюты, майнинг, программирование

Доступ к переменной экземпляра из другого класса

Я хотел бы получить доступ к переменной экземпляра (заказы) класса (DailyOrders) из init другого, имея в виду, что класс, содержащий переменную экземпляра, является родителем другого. Кажется, это идеальное использование для наследования, но я не мог заставить его работать. Вот код.

class DailyOrders():

    PRICE_PER_DOZEN = 6.5

    def __init__(self, day):
        self.orders = []
        self.day = day

    def total_eggs(self):
        total_eggs = 0
        for order in self.orders:
            total_eggs += order.eggs
        return total_eggs

    def show_report(self):
        if self.total_eggs() < 0:
            print("No Orders")
        else:
            print(f"Summary:\nTotal Eggs Ordered: {self.total_eggs()}\n*********")
            print(f"Average Eggs Per Customer: {self.total_eggs() / len(self.orders):.0f}")


class EggOrder():

    def __init__(self, eggs=0, name=""):
        if not name:
            self.new_order()
        else:
            self.name = name
            self.eggs = eggs

        orders.append(self)

    def new_order(self):
        self.name = string_checker("Name: ")
        self.eggs = num_checker("Number of Eggs: ")

    def get_dozens(self):
        if self.eggs % 12 != 0:
            dozens = int(math.ceil(self.eggs / 12))
        else:
            dozens = self.eggs / 12
        return dozens

    def show_order(self):
        print(f"{self.name} ordered {self.eggs} eggs. The price is ${self.get_dozens() * DailyOrders.PRICE_PER_DOZEN}.")


if __name__ == "__main__":

    friday = DailyOrders("Friday")
    friday_order = EggOrder(12, "Someone")
    friday_order.show_order()
    friday.show_report()

    saturday = DailyOrders("Saturday")
    saturday_order = EggOrder(19, "Something")
    saturday_order.show_order()
    saturday.show_report()

Раньше я не пробовал использовать наследование, но одно из предложенных решений — использовать super(EggOrder, self).__init__(), но это заставило меня указать день, так как он собирался создать еще один экземпляр класса DailyOrders. Я не хочу этого.


  • Пожалуйста, исправьте отступ. 14.02.2019

Ответы:


1

Просто наследуйте и пользователь super для вызова родительского инициализатора:

class DailyOrders:

    def __init__(self, day):
        self.orders = []
        # ...

class EggOrder(DailyOrders):

    def __init__(self, day, eggs=0, name=""):
        super().__init__(day)
        # Now self.orders is available.

Имейте в виду, что если родительский инициализатор получает какой-либо параметр, дочерний элемент также должен получить его, чтобы иметь возможность передать его.

Не указан параметр дня...

Если вы не хотите предоставлять параметр дня, у вас должен быть другой класс с интерфейсом/функциональными возможностями, которые являются общими для других, и наследуется от такого базового класса:

class BaseOrders:
    def __init__(self):
        self.orders = []
        # ...

class DailyOrders(BaseOrders):

    def __init__(self, day):
        super().__init__()
        # Now self.orders is available.
        self.day = day
        # ...

class EggOrder(BaseOrders):

    def __init__(self, eggs=0, name=""):
        super().__init__()
        # Now self.orders is available.
14.02.2019
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..