我想从另一个的 init 中访问类(DailyOrders)的实例变量(订单),请记住,包含实例变量的类是另一个实例的父类。这似乎是继承的完美用法,但我无法使其正常工作。这是代码。
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类的另一个实例。我不要这个。
答案 0 :(得分:2)
只需继承并使用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.