有一个类有两个方法:
method1()- 一次添加一个(增量);method2()- 获取一个字符串并将其添加到列表中。
你需要什么:
完成使用某个方法后(不是每次调用后,而是不再需要该方法后),您需要通过调用 来表明这一点
escape_method()。
如果您忘记执行此操作,则:- 第二种方法将无法使用
- 当您完成该类的工作时(见下文),菜单将不会出现。
您还需要指示该类的工作结束(方法调用
escape_class())。
此方法将返回“是”\“否”菜单。- 如果“是”,则保存更改,我们可以获得变量。
- 如果“否”——他们就没有得救。
仅当那些已工作method1且method2已关闭的项目才会被调用。‘关闭’课程后,my_list也可以counter通过调用来获取get_data()。
一次只能有一个(
method1()或)方法在运行method2(),您需要了解是哪一个。
这是通过一个变量来完成的,其中写入当前方法的名称,并且可以获取该变量。escape_method它在方法调用之间保留此状态,并在 close( ) 当前方法后重置。我们需要能够撤消 和 的最后一个
method1()操作method2()。
这些方法彼此不相关;一个的完成并不意味着另一个的开始。
我大致做了第1 - 3点,但我不喜欢它的工作原理(特别是复选框不太可靠)。
我怎样才能改变这个?您可能需要装饰器或外部控制类。
此外,类必须my_list仅counter通过方法get_data()并且仅在方法关闭后(因此方法被关闭)返回变量。
如何实施?
第4点很麻烦,我都不想贴了。如何撤消上次操作?
class DataProcessing:
def __init__(self):
self.my_list = [] # method1
self.counter = 0 # method2
self.current_method = 0 # текущий метод
self.are_methods_closed = True # флажок закрытия метода
self.is_class_closed = True # флажок закрытия класса
def method1(self):
if self.are_methods_closed:
self.are_methods_closed = False # начало сессии этого метода
self.current_method = 1
self.counter += 1
elif self.are_methods_closed == False and self.current_method == 1: # продолжение сессии этого метода
self.counter += 1
def method2(self, value):
if self.are_methods_closed:
self.are_methods_closed = False
self.current_method = 2
self.my_list.append(value)
elif self.are_methods_closed == False and self.current_method == 2:
self.my_list.append(value)
def escape_method(self):
self.are_methods_closed = True
self.current_method = 0
def escape_class(self):
if self.are_methods_closed:
text = input("Сохранить изменения? \n Введите Да либо Нет: ")
if text == 'Да':
print('Изменения сохранены')
self.is_class_closed = True
elif text == 'Нет':
print('Изменения не сохранены')
self.is_class_closed = True
else:
pass
def get_data(self, n):
if n == 1:
return(self.counter)
elif n == 2:
return (self.my_list)
我试图实现你写的内容。
事实上我并没有正确理解你想要做什么。
尝试运行我的示例,慢慢按下可用按钮,并仔细观察屏幕上发生的情况。