Форум сайта python.su
Всех приветствую, и с наступившим НГ!
До этого не вникал в эту тему серъезно, сейчас напротив, решил заполнить этот пробел. Посоветовали книжку http://www.ozon.ru/context/detail/id/31079082/ по паттернам проектирования, книга неплоха в плане подачи материала - самое оно для новичка, ну так вот там все примеры на джаве, а я решил переписать все примеры на питон, ради спортивного интереса. Вобщем там первая задачка по уткам, используя паттерн СТРАТЕГИЯ, авторы разрабатывают этакий уточный симулятор. Лучше приведу код и спрошу конкретнее:
public interface QuackBehavior { public void quack(); } public class Quack implements QuackBehavior { public void quack() { System.out.println("Quacking Duck!"); } } public class Squeak implements QuackBehavior { public void quack() { System.out.println("Squeaking Duck!"); } } public class Duck { QuackBehavior quackBehavior; public void performQuack() { quackBehavior.quack(); } } public class MallardDuck extends Duck { public MallardDuck() { quackBehavior = new Quack(); } } Duck mallard = new MallardDuck(); mallard.performQuack();
class QuackBehavior: def quack(): pass class Quack(QuackBehavior): def quack(self): print("Quacking Duck!") class Squeak(QuackBehavior): def quack(self): print("Squeaking Duck!") class Duck: def performQuack(self): self.quackBehavior.quack() class MallardDuck(Duck): def __init__(self): self.quackBehavior = Quack() mallard = MallardDuck() mallard.performQuack()
Офлайн
lobsterДело вкуса
Правильно ли я переписал код
lobsterЭто совсем разные языки. В java нет множественного наследования, указателей и много чего еще. А шаблоны как ни крути предназначены для преодоления трудностей выражения мысли в конкретном языке. Многие шаблоны для java просто не имеют смысла в python.
ну так вот там все примеры на джаве
class Tqv1: def qv(self): print("krac") class Tqv2: def qv(self): print("crac") class Tsplash1: def sp(self): print("bum bum") class Tsplash2: def sp(self): print("xlop xlop") class Tdack1(Tqv1,Tsplash2): pass class Tdack2(Tqv2,Tsplash1): pass dack1=Tdack1() dack2=Tdack2() dack1.qv(); dack1.sp(); dack2.qv(); dack2.sp(); >>> krac xlop xlop crac bum bum
Отредактировано doza_and (Янв. 2, 2016 11:47:19)
Офлайн
lobster
как мне кажется можно вообще не использовать в самом начале интерфейс “QuackBehavior”
Отредактировано ayb (Янв. 2, 2016 11:42:55)
Офлайн
ayb
Вот так?
class QuackBehavior: def quack(): raise NotImplementedError
Отредактировано lobster (Янв. 3, 2016 06:44:11)
Офлайн
lobsterjava c++ языки со строгой типизацией. Многие шаблоны предназначены для того чтобы заставить работать на вас проверки времени компиляции. В python такого и близко нет. Поэтом у основном надо выкидывать шаблоны а не наращивать новые.
подрезать, нарастить в питоновском стиле
lobsterВам правильно советуют, возьмите лучше книгу по питону. По моим ощущениям изворачиваться вы будете скорее на java. Python более простой язык, нет деления на время компиляции и исполнения. Большинство шаблонов реализуются более простыми средствами. С другой стороны в Питоне важнее правильно построить методики тестирования и рантайм проверок, которые в некоторой мере замещают проверку типов.
лучше наверное будет на джаве
Офлайн
lobster
По abc вчера тоже смотрел, я так понял при использовании абстрактных классов этот модуль предохраняет: “Если ты наследуешься от абс класса, то незабудь реализовать методы в своем классе”
Офлайн
Офлайн
infoing
Благодарю за подборку!
Офлайн