我正试图了解类的结构。
该示例是带有__size
和__toppings_list
的比萨饼订单。
我可以很容易地通过尺寸,但不会让我将浇头作为清单传递
我不断得到
size = small
toppings = small
无论我如何尝试调用__string__
打印功能,它都不能很好地发挥作用。
class Pizza:
def __init__(self, size = "small", topping_list = []):
self.__size = size
self.__topping_list = topping_list
def __string__(self):
string = "Size is" + self.__size + ' and Topping is ' + self.__topping_list
return string
def set_size(self, size):
self.__size = size
def get_size(self):
return self.__size
def set_topping(self, topping):
self.__topping_list
def get_topping(self):
return self.__size
def add_topping(self, topping):
self.__topping_list
def get_cost(self):
cost = 0
size = pizza.get_size()
toppings = pizza.get_topping()
totalToppings = len(toppings)
if size == "small":
cost += 10
elif size == "medium":
cost += 12
elif size == "large":
cost +=14
cost += totalToppings * 2
return cost
pizza = Pizza("small",["meat"])
size = pizza.get_size()
toppings = pizza.get_topping()
print(size)
print(toppings)
pizza_string = str(pizza)
print(pizza_string)
答案 0 :(得分:3)
您的代码中发生了很多小怪异的事情。
首先,修复get_topping
方法(如注释中所述),重新创建您的实例,该实例将起作用—这是用于解决主要问题。
小事,但强烈建议:
使用[空]列表作为默认参数不是一个好主意,除非您知道自己在做什么。列表是可变的,参数是“绑定”到函数对象的。因此,一次更改该默认值将影响所有后续调用。
您尝试使用__string__
实现的事情似乎在实现__str__
在使用__attr
时,请三思而后行。如果您有Java之类的语言的经验,那么这似乎是个好主意,但是在python中,以这种方式“隐藏”属性通常是个坏主意。用户仍然可以使用此方法,同时使您的类难以继承-使用非协作类并不是一件很有趣的事情。如果要标识非公共接口,请考虑使用单个下划线(_size
)。如果您不确定是否应该公开-将其公开。您可以随时将其设置为@property
而不会破坏界面。 get_...
方法同样适用-如果您在没有属性的情况下检索属性,则没有必要像这样的代码。仅具有self.size
属性并使用它就可以了。如果您百分百确定要在实例化后不希望对此内容进行编辑,请使其
def __init__(...):
self._size = ...
@property
def size(self):
return self._size