设计模式(建造者)/属性错误
design patterns (builder) / attribute error
我想创建简单的应用程序,使用构建器和原型模式来建造不同的房屋。
(1)修改程序,我在create_house方法中添加了nameself._builder.name()
属性,为我们设置了房子的名字。
然而,意外得到一个错误:AttributeError: 'House1' object has no attribute 'name
'。我不知道为什么会这样,因为我认为我已经正确定义了所有内容。
class Director():
def __init__(self, builder):
self._builder = builder
def create_house(self):
self._builder.name()
self._builder.create_new_house()
self._builder.add_basement()
self._builder.add_rooms()
self._builder.add_roof()
def get_house(self):
return self._builder.house
class Builder():
def __init__(self):
self.house = None
def create_new_house(self):
self.house = House()
class House1(Builder):
def add_name(self):
self.house.name = 'house1'
def add_basement(self):
self.house.basement = 'with basement'
def add_roof(self):
self.house.roof = 'wood roof'
def add_rooms(self):
self.house.rooms = 3
class House2(Builder):
def add_name(self):
self.house.name = 'house2'
def add_basement(self):
self.house.basement = 'no basement'
def add_roof(self):
self.house.roof = 'brick roof'
def add_rooms(self):
self.house.rooms = 5
class House():
def __init__(self):
self.name = None
self.basement = None
self.roof = None
self.rooms = None
def __str__(self):
return 'Building: {} {}, {}, and {} room'.format(self.name, self.basement,
self.roof, self.rooms)
builder = WoodHouse()
director = Director(builder)
director.create_house()
house = director.get_house()
print(house)
(2)
顺便问问能不能改进(少写)这个叫“建”房子的过程。
我的意思是这个代码,如果我创建,例如,3 个这样的房子,我必须重复它,但是,这是非常不可读和不方便的。
builder = WoodHouse()
director = Director(builder)
director.create_house()
house = director.get_house()
print(house)
只使用for循环。
for builder in [WoodHouse(), BrickHouse()]:
director = Director(builder)
director.create_house()
house = director.get_house()
print(house)
我想创建简单的应用程序,使用构建器和原型模式来建造不同的房屋。
(1)修改程序,我在create_house方法中添加了nameself._builder.name()
属性,为我们设置了房子的名字。
然而,意外得到一个错误:AttributeError: 'House1' object has no attribute 'name
'。我不知道为什么会这样,因为我认为我已经正确定义了所有内容。
class Director():
def __init__(self, builder):
self._builder = builder
def create_house(self):
self._builder.name()
self._builder.create_new_house()
self._builder.add_basement()
self._builder.add_rooms()
self._builder.add_roof()
def get_house(self):
return self._builder.house
class Builder():
def __init__(self):
self.house = None
def create_new_house(self):
self.house = House()
class House1(Builder):
def add_name(self):
self.house.name = 'house1'
def add_basement(self):
self.house.basement = 'with basement'
def add_roof(self):
self.house.roof = 'wood roof'
def add_rooms(self):
self.house.rooms = 3
class House2(Builder):
def add_name(self):
self.house.name = 'house2'
def add_basement(self):
self.house.basement = 'no basement'
def add_roof(self):
self.house.roof = 'brick roof'
def add_rooms(self):
self.house.rooms = 5
class House():
def __init__(self):
self.name = None
self.basement = None
self.roof = None
self.rooms = None
def __str__(self):
return 'Building: {} {}, {}, and {} room'.format(self.name, self.basement,
self.roof, self.rooms)
builder = WoodHouse()
director = Director(builder)
director.create_house()
house = director.get_house()
print(house)
(2) 顺便问问能不能改进(少写)这个叫“建”房子的过程。 我的意思是这个代码,如果我创建,例如,3 个这样的房子,我必须重复它,但是,这是非常不可读和不方便的。
builder = WoodHouse()
director = Director(builder)
director.create_house()
house = director.get_house()
print(house)
只使用for循环。
for builder in [WoodHouse(), BrickHouse()]:
director = Director(builder)
director.create_house()
house = director.get_house()
print(house)