Skip to main content
 首页 » 编程设计

python之如何最好地从方法创建对象变量

2025年05月04日14lautakyan007

设置由方法设置的对象变量的最佳方法是什么?下面的方法是首先在 __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 是分开的,您的程序设计会变得更简洁。