首页 > 解决方案 > 实例属性继承

问题描述

我试图做到这一点,因此当创建客户实例并指定他们要去的餐厅时,餐厅类实例的 number_served 实例属性会增加去餐厅的客户数量。

我不确定 number_served 是否应该是类或实例属性(我认为是类),并且我不确定如何将属性从 Restaurant 类继承到 Customers 类,以便我可以增加它。

class Restaurant:



    def __init__(self,name,restaurant_type,cuisine_type):
        self.name = name 
        self.restaurant_type = restaurant_type
        self.cuisine_type = cuisine_type
        self.number_served = 0 


    def describe_restaurant(self):
        print(f"{self.name} is {self.restaurant_type} which serves {self.cuisine_type}.")

    def open_restaurant(self):
        print(f"{self.name} is open.")

    def get_number_served(self):
        print(f"{self.number_served} customers served at the {self.name} today.")

    def increment_number_served(self,num):
        self.number_served += num

class Customers(Restaurant):

    def __init__(self,where_eating,no_of_people):
        self.where_eating = where_eating
        self.no_of_people = no_of_people

    def go_eat(self):
        self.increment_number_served(self.no_of_people)

我基本上希望餐厅实例的 number_served 属性增加从客户类的实例去餐厅的顾客数量

标签: pythonpython-3.x

解决方案


顾客不是餐厅的一种类型,因此这里不适合继承。该go_eat方法应该取一个实例Restaurant作为参数。

class Restaurant:
    def __init__(self, name, restaurant_type, cuisine_type):
        self.name = name 
        self.restaurant_type = restaurant_type
        self.cuisine_type = cuisine_type
        self.number_served = 0 

    def describe_restaurant(self):
        print(f"{self.name} is {self.restaurant_type} which serves {self.cuisine_type}.")

    def open_restaurant(self):
        print(f"{self.name} is open.")

    def get_number_served(self):
        print(f"{self.number_served} customers served at the {self.name} today.")

    def increment_number_served(self,num):
        self.number_served += num


r = Restaurant("...", "...", "...")


class Customers:

    def __init__(self, no_of_people):
        self.no_of_people = no_of_people

    def go_eat(self, restaurant):
        restaurant.increment_number_served(self.no_of_people)


c = Customers(9)
c.go_eat(r)

如果你想Customers代表的不仅仅是一组食客,而是一组去特定餐厅的食客,然后传递r__init__

class Customers:

    def __init__(self, where, no_of_people):
        self.where = where
        self.no_of_people = no_of_people

    def go_eat(self):
        self.where.increment_number_served(self.no_of_people)


c = Customers(r, 9)
c.go_eat()

推荐阅读