Я работал в Sublime Text 3 над упражнением из учебника Python Cra sh, посвященного родительским и дочерним классам, и столкнулся с проблемой с функцией super()
при попытке построить / запустить мою программу
Я использую систему сборки Conda (Anaconda) для сборки своих программ. Я получаю ошибку трассировки с функцией super()
при запуске моей программы с Conda:
Traceback (most recent call last):
File "/Users/watchmen1/Desktop/python_work/Chapter 9/ice_cream_stand.py", line 61, in <module>
braums = IceCreamStand('Braums')
File "/Users/watchmen1/Desktop/python_work/Chapter 9/ice_cream_stand.py", line 52, in __init__
super().__init__(restaurant_name, cuisine_type)
TypeError: super() takes at least 1 argument (0 given)
[Finished in 0.0s with exit code 1]
[cmd: ['python', '-u', '/Users/watchmen1/Desktop/python_work/Chapter 9/ice_cream_stand.py']]
[dir: /Users/watchmen1/Desktop/python_work/Chapter 9]
[path: /usr/bin:/bin:/usr/sbin:/sbin]
Тем не менее, я не получаю эту проблему, когда я запускаю ее только с обычным Python 3 сборки системы, и я понимаю, что, по крайней мере, в Python 3 функция super()
не требует аргумента при ее использовании для соединения родительского и дочернего классов.
Я предполагал, что Anaconda работал как Python 3, когда использовал его в качестве системы сборки. Однако, поскольку в сообщении об ошибке говорится, что мне нужно ввести аргумент, мне интересно, действительно ли он работает как Python 2.7 или как-то еще, поскольку моя книга отмечает, что в python 2.7 функция super()
требует аргументов .
Я могу использовать Python 3 в качестве системы сборки, но, учитывая, что я планирую использовать Anaconda в будущем, я надеялся, что смогу выяснить, что происходит.
class Restaurant():
""" An attempt to model a restaurant."""
def __init__(self, restaurant_name, cuisine_type):
"""Initialize restaurant name and cuisine type."""
self.restaurant_name = restaurant_name
self.cuisine_type = cuisine_type
self.number_served = 0
def describe_restaurant(self):
"""Simulate a sentance naming the restaurant and giving its cuisine type."""
print(self.restaurant_name.title() + " is a restaurant that serves " + self.cuisine_type.title() + " food.")
def open_restaurant(self):
"""Simulate a sentance announcing the restaurant is open."""
print(self.restaurant_name.title() + ", is now open!")
def set_number_served(self, customers_served):
"""Set the number of people served at a #restaurant."""
self.number_served = customers_served
def increment_number_served(self, customers):
"""Add selected amount of customers to the total number served."""
self.number_served += customers
# restaurant = Restaurant('Shake Shack', 'Americana')
#print(restaurant.resturant_name.title())
#print(restaurant.cuisine_type.title())
# restaurant.describe_resturant()
# #print("")
# restaurant.open_resturant()
# print("\nNumber Served: " + str(restaurant.number_served))
# print("")
# #restaurant.number_served = 20
# restaurant.set_number_served(20)
# print("Number Served: " + str(restaurant.number_served))
# print('')
# restaurant.increment_number_served(22)
# print("Number Served: " + str(restaurant.number_served))
class IceCreamStand(Restaurant):
"""Create child class of restaurant that represents an Ice Cream Stand."""
def __init__(self, restaurant_name, cuisine_type='ice_cream'):
"""Initialize attributes of the parent class."""
super().__init__(restaurant_name, cuisine_type)
self.flavors = []
def show_flavors(self):
"""Display the list of flavors the Ice Cream Stand offers."""
print("\nThis Ice Cream Stand offers the following flavors: ")
for flavor in self.flavors:
print("\t- " + flavor.title())
braums = IceCreamStand('Braums')
braums.flavors = ['Chocolate', 'Vanilla', 'Sherbert']
braums.describe_restaurant()
braums.show_flavors()