class A: B.func() @classmethod def func(cls): print("func_a") class B: A.func() @classmethod def func(cls): print('func_b')
если поменять их местами класс В не увидит класс А
Как сделать так,чтобы они видели друг друга
class A: B.func() @classmethod def func(cls): print("func_a") class B: A.func() @classmethod def func(cls): print('func_b')
xam1816Придется вам для начала объяснить, зачем такие извращения понадобились
Как сделать так,чтобы они видели друг друга
class B: @classmethod def func(cls): print('func_b') class A: B.func() @classmethod def func(cls): print("func_a") class B: A.func() @classmethod def func(cls): print('func_b')
class A: @classmethod def func(cls): print("func_a") class B: @classmethod def func(cls): print('func_b') B.func() A.func()
FishHookПытаюсь понять как строить код на примере калькулятора
Придется вам для начала объяснить, зачем такие извращения понадобились
класс Логика:
фун сложить(а,б):
вернуть a+б
фун вычесть(а,б)
вернуть а-б
..........
фун калькуляция(а,действие,б)
а = Децимал(а)
б = Децимал(б)
результат = ""
если действие == "+":
результат = сложить(а,б)
.......
обновить_экран(стр(результат)
класс Приведение данных:
а =""
б = ""
действие =""
фун обработка(символ):
если символ в ("+","-")
действие = символ
иначе_если символ == "="
калькуляция(а,действие,б)
иначе:
если действие=="":
а += символ
иначе:
б += символ
...............
обновить_экран(ф"{a}{действие}{б}"
класс Интерфейс
экран = Лейбл(....)
фун обновить_экран(текст)
экран.конфиг(текст = текст)
кнопка = Баттен(текст=символ,команд = обработка(символ))
class Calculator(object): def __init__(self): self.stack = [] self.action = None def push(self, value): self.stack.append(value) def pop(self): return self.stack.pop() def set_action(self, action): self.action = action def result(self): b = self.pop() a = self.pop() res = self.action.calculate(a, b) self.push(res) self.action = None return res class Action(object): def calculate(self, a, b): raise NotImplementedError class Plus(Action): def calculate(self, a, b): return a + b class Minus(Action): def calculate(self, a, b): return a - b class Program(object): key_mapping = {'+': Plus, '-': Minus} def __init__(self): self.calculator = Calculator() def run(self): print('Welcome to calculator') while True: i = input('>>>') if i: if i in self.key_mapping: action = self.key_mapping[i]() self.calculator.set_action(action) elif i.isdigit(): self.calculator.push(int(i)) else: print('ERROR') else: print self.calculator.result() program = Program() program.run()
xam1816Хорошо, что ты используешь псевдокод. Плохо, что в твоём псевдокоде так много деталей. Псевдокод и нужен как раз для того, чтобы не тратить время на детали. То есть там, где в обычном коде стоит двоеточие, в псевдокоде этого двоеточия быть не должно. Псевдокод просто должен быть однозначно понятен, в нём просто не должно быть двусмысленностей - и это единственное требование. Так что очень сильно бросилось в глаза, насколько много деталей в твоём псевдокоде. Псевдокод должен быть таким, чтобы переписывать его было совсем не напряжно. Тем он и отличается от конечного кода. Конечный код очень напряжно переписывать сто раз, тогда как псевдокод ты спокойно сто раз перепишешь. Для этого он и нужен. Нужно сделать 100500 набросков кода и выбрать из них самый лучший. Причём делается это легко и быстро, благодаря отсутствию синтаксических нюансов, которые есть уже в реальном коде. А уже потом, когда выбран самый лучший вариант кода на псевдокоде, его можно реализовать со всем синтаксисом уже в реальном коде со всеми запятыми, точками, двоеточиями и так далее, что и занимает время.
Пытаюсь понять как строить код на примере калькулятора
код типа такого
FishHookТут нарушил букву D из SOLID.class Program(object): key_mapping = {'+': Plus, '-': Minus} def __init__(self): self.calculator = Calculator()
class Program(object): key_mapping = {'+': Plus, '-': Minus} def __init__(self, calculator): self.calculator = calculator
py.user.next
py.user.next
FishHookСпасибо,изучаю
FishHook