我正在研究简单的strategy
模式实现。我是从Java世界来到Python的,所以我把所有的类划分成不同的文件,因为这对我来说似乎没问题。但我有麻烦的包装和进口,请参阅下面的代码的细节。你知道吗
所以我有一只鸭子和两种不受约束的行为:飞和呱呱。你知道吗
总体结构为:
behavior/
├── __init__.py
├── __init__.pyc
├── __pycache__
│ └── __init__.cpython-37.pyc
├── fly
│ ├── FlyBehavior.py
│ ├── FlyBehavior.pyc
│ ├── FlyNoWay.py
│ ├── FlyRocketPowered.py
│ ├── FlyRocketPowered.pyc
│ ├── FlyWithWings.py
│ ├── __init__.py
│ ├── __init__.pyc
│ └── __pycache__
│ ├── FlyBehavior.cpython-37.pyc
│ ├── FlyRocketPowered.cpython-37.pyc
│ └── __init__.cpython-37.pyc
└── quack
├── MuteQuack.py
├── Quack.py
├── QuackBehavior.py
├── Squeak.py
└── __init__.py
duck
├── Duck.py
├── MallardDuck.py
├── ModelDuck.py
├── __init__.py
├── __init__.pyc
└── __pycache__
├── Duck.cpython-37.pyc
├── MallardDuck.cpython-37.pyc
└── __init__.cpython-37.pyc
MiniDuckSimulator.py
MiniDuckSimulator.pyc
飞行类:
飞行行为.py
from abc import ABC, abstractmethod
class FlyBehavior(ABC):
@abstractmethod
def fly(self):
pass
飞度.py
from behavior.fly import FlyBehavior
class FlyNoWay(FlyBehavior):
def fly(self):
print("I can't fly")
飞行火箭动力.py
from behavior.fly import FlyBehavior
class FlyRocketPowered(FlyBehavior):
def fly(self):
print("I'm flying with a rocket")
带翅膀的苍蝇.py
from behavior.fly import FlyBehavior
class FlyWithWings(FlyBehavior):
def fly(self):
print("I'm flying!")
庸医班:
江湖行为.py
from abc import ABC, abstractmethod
class QuackBehavior(ABC):
@abstractmethod
def quack(self):
pass
庸医
from behavior.quack import QuackBehavior
class Quack(QuackBehavior):
def quack(self):
print('Quack')
MuteQuack.py公司
from behavior.quack import QuackBehavior
class MuteQuack(QuackBehavior):
def quack(self):
print('<< Silence >>')
吱吱作响的
from behavior.quack import QuackBehavior
class Squeak(QuackBehavior):
def quack(self):
print('Squeak')
鸭子类:
鸭子.py
from abc import ABC, abstractmethod
class Duck(ABC):
fly_behavior = None
quack_behavior = None
@abstractmethod
def display(self):
pass
def perform_fly(self):
self.fly_behavior.fly()
def perform_quack(self):
self.quack_behavior.quack()
def swim(self):
print('All ducks float, even decoys!')
野鸭.py
from duck import Duck
class MallardDuck(Duck):
def __init__(self):
self.quack_behavior = Quack()
self.fly_behavior = FlyWithWings()
def display(self):
print("I'm a real Mallard duck")
模型鸭.py
from duck import Duck
class ModelDuck(Duck):
def __init__(self):
self.fly_behavior = FlyNoWay()
self.quack_behavior = Quack()
def display(self):
print("I'm a model duck")
和主类:
迷你鸭模拟器.py
from duck import MallardDuck
from duck import ModelDuck
import behavior.fly.FlyRocketPowered as FlyRocketPowered
if __name__ == "__main__":
mallard = MallardDuck()
mallard.display()
mallard.perform_fly()
mallard.perform_quack()
model = ModelDuck()
model.display()
model.perform_fly()
model.fly_behavior = FlyRocketPowered()
model.perform_fly()
程序输出:
$ python MiniDuckSimulator.py
Traceback (most recent call last):
File "MiniDuckSimulator.py", line 1, in <module>
from duck import MallardDuck
File "/Users/p/Documents/Develop/patterns_book/00_strategy/py/duck/MallardDuck.py", line 3, in <module>
class MallardDuck(Duck):
TypeError: module() takes at most 2 arguments (3 given)
我的模块怎么了?我存储和构造代码/类的方法可以吗?谢谢。你知道吗
应该是的
您要导入的
MallardDuck
仍然是一个文件,而不是一个类,即使其中只有一个类。你知道吗以类似的方式更改所有其他导入。你知道吗
注意事项:
相关问题 更多 >
编程相关推荐