2024-09-29 01:26:11 发布
网友
我想对《星球大战》中的绝地武士团建模如下:
新手可以:
学徒可以:
骑士可以:
主人可以:
我所经历的痛点是,在某个时刻,我想这样做:
anakin # novice obiwan # master obiwan.takes_padawan(anakin) anakin # padawan
换句话说,我想将新手类的实例提升为学徒类的实例。我看到一些解决方案仅部分解决了上述列举的约束,如:
H.E.L.p哈哈
谢谢大家:)
您不想升级同一个对象,但可以在旧对象的基础上创建一个新对象,例如:
padawan = Padawan(novice) #creates a new Padawan using information from a novice
但是,我会更进一步,将person和技能等级/等级分开,这样person对象可以保留,但您可以替换等级(或者以任何方式调用它)。这可以让他们在自己的课程中拥有战争技能等,这是一件很好的事情。这是继承模式上的聚合或组合。这不是一个完美的解决方案,但可能会给出以下想法:
class Person: def __init__(self, name): self.name = name self.rank = None def update(self): if self.rank is not None: self.rank.do() class Novice: pass class Padawan: def __init__(self, person, master): self.person = person self.master = master def do(self): print(f"I am Padawan {self.person.name}, Learning from my master {self.master.person.name}") class Master: def __init__(self, person): self.person = person self.padawans = [] def take_padawan(self, person): person.rank = Padawan(person, self) self.padawans.append(person) anakin = Person("Anakin") anakin.rank = Novice() obiwan = Person("Obi-Wan") obiwan.rank = Master(obiwan) print(anakin.rank) obiwan.rank.take_padawan(anakin) print(anakin.rank) anakin.update()
你可以在https://repl.it/@ToniAlatalo/RealCompetentDevices#main.py运行它
您不想升级同一个对象,但可以在旧对象的基础上创建一个新对象,例如:
但是,我会更进一步,将person和技能等级/等级分开,这样person对象可以保留,但您可以替换等级(或者以任何方式调用它)。这可以让他们在自己的课程中拥有战争技能等,这是一件很好的事情。这是继承模式上的聚合或组合。这不是一个完美的解决方案,但可能会给出以下想法:
你可以在https://repl.it/@ToniAlatalo/RealCompetentDevices#main.py运行它
相关问题 更多 >
编程相关推荐