设置由方法设置的对象变量的最佳方法是什么?下面的方法是首先在 __init__() 中定义 self.toppings,然后在 select_toppings() 方法中设置值吗?练习如何设置 self.toppings 变量?如果您有更好的建议,请告诉我。谢谢。
class Pizza:
def __init__():
self.toppings = None
def select_toppings(input):
self.toppings = input
请您参考如下方法:
主要问题是:当一个诚实的程序员编写时会发生什么:
pizza = Pizza()
pizza.do_something()
和 do_something() 需要 self.toppings != None?
请记住:构造函数的作用是正确初始化对象。所有必填字段应在构建结束时初始化。
如果对象的初始化变得太复杂(我会说:一旦构造函数不仅仅是为字段赋值),请使用 creational pattern .工厂示例:
class Pizza:
@staticmethod
def create(topping_list):
toppings = Toppings(topping_list)
return Pizza(toppings)
def __init__(self, toppings):
self._toppings = toppings
...
或者构建器:
class PizzaBuilder:
def __init__(self):
self._toppings = DEFAULT_TOPPINGS
self._size = DEFAULT_SIZE
def build(self):
return Pizza(self.toppings, self._size)
def toppings(self, toppings):
self._toppings = toppings
return self
def size(self, size):
self._size = size
return self
class Pizza:
def __init__(self, toppings, size):
self._toppings = toppings
self._size = size
您可以创建您需要的所有组合:
pizza1 = PizzaBuilder().build() # default pizza
pizza2 = PizzaBuilder().size(10).build() # big pizza with default toppings
pizza3 = PizzaBuilder().toppings(t1).build() # ...
创建模式的一个优点是您的对象是完全初始化的,并且在大多数情况下是不可变的。简而言之,setter 和 getter 是分开的,您的程序设计会变得更简洁。
