python - 实例属性继承
问题描述
我试图做到这一点,因此当创建客户实例并指定他们要去的餐厅时,餐厅类实例的 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 属性增加从客户类的实例去餐厅的顾客数量
解决方案
顾客不是餐厅的一种类型,因此这里不适合继承。该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()
推荐阅读
- ios - iOS:从 Interface Builder 设置 UITextView 行距?
- vb.net - Vb.net:我如何同时单击 2 个按钮?
- spring-boot - 在 Spring Boot 中将 HTTP 定向到代理后面的 HTTPS
- c - 使用 strtok 后添加指向已建立指针数组的指针
- c# - 如何仅在下拉列表中选择日期来填充 HTMLTableCell?
- ios - Alamofire 对象映射器:如何快速解析嵌套数组
- python - MySQL table left join not matching (MySQL, Python)
- java - 仅提供密钥的 Java 中的 Openssl -aes-256-cbc
- javascript - 第一次倒计时后未显示 HTML 中的计时器
- ajax - 每次重新加载页面时如何获得随机啤酒?