从另一个类访问实例变量

2024-04-29 15:22:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从另一个类的init访问一个类(DailyOrders)的实例变量(orders),记住包含实例变量的类是另一个类的父类。这似乎是完美的使用继承,但我不能得到它的工作。这是密码。你知道吗

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类的另一个实例。我不要这个。你知道吗


Tags: nameselfifinitdefshowordereggs
1条回答
网友
1楼 · 发布于 2024-04-29 15:22:36

只需继承并使用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.

请记住,如果父初始值设定项接收到任何参数,则子初始值设定项也必须接收该参数才能传递它。你知道吗

不提供日参数

如果不想提供day参数,则应该有另一个类,该类具有其他类通用的接口/功能,并且继承此类基类:

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.

相关问题 更多 >