from dataclasses import dataclass, field
from employee import Employee
import json
import re
# from custom_exception import Input_Exception
@dataclass()
class ResourceManager:
employee_list: dict = field(default_factory=dict)
def menu(self):
print('Menu:')
print('1 : Show data about employee')
print('2 : Add new employee')
print('3 : Remove employee')
print('4 : Add or remove employee hours')
print('5 : Save changes into the file')
print('6 : Load data from the file')
print('7 : Check employee salary')
print('0 : Exit program')
def controls(self):
switch = {
"1": self.search_employee,
"2": self.add_employee,
"3": self.remove_employee,
"4": self.change_hours,
"5": self.save_data,
"6": self.load_data,
"7": self.check_salary,
"x": self.quit,
}
choice = input("Wybierz jedn? opcj?:\n=> ")
if choice in switch.keys():
switch[choice]()
else:
print("Niepoprawny wybór!")
def quit(self):
x = False
return x
ResourceManage 是一個用于表示相當簡單的 CLI 的類,我使用字典來實作切換,并想使用 def quit(self) 退出程式。
from resource_manager import ResourceManager
if __name__ == '__main__':
setup = ResourceManager()
x = True
while x:
setup.menu()
setup.controls()
我正在嘗試使用 def quit(self) 方法通過更改全域 x 來退出 while 回圈的 CLI 選單,但它不起作用。我嘗試了很多不同的東西,但無法讓它發揮作用。
我該如何解決?
uj5u.com熱心網友回復:
在您的代碼中有兩個 x。一個 x 在本地函式中退出,另一個是在全域范圍內。分配一個不會改變另一個。
我建議您向 ResourceManager 添加一個屬性,說明 cli 是否應該退出。
這可以像這樣作業:
from dataclasses import dataclass, field
from employee import Employee
import json
import re
# from custom_exception import Input_Exception
@dataclass()
class ResourceManager:
employee_list: dict = field(default_factory=dict)
x: bool = True
def menu(self):
print('Menu:')
print('1 : Show data about employee')
print('2 : Add new employee')
print('3 : Remove employee')
print('4 : Add or remove employee hours')
print('5 : Save changes into the file')
print('6 : Load data from the file')
print('7 : Check employee salary')
print('0 : Exit program')
def controls(self):
switch = {
"1": self.search_employee,
"2": self.add_employee,
"3": self.remove_employee,
"4": self.change_hours,
"5": self.save_data,
"6": self.load_data,
"7": self.check_salary,
"x": self.quit,
}
choice = input("Wybierz jedn? opcj?:\n=> ")
if choice in switch.keys():
switch[choice]()
else:
print("Niepoprawny wybór!")
def quit(self):
self.x = False
return self.x
main 現在可以參考以下屬性:
if __name__ == '__main__':
setup = ResourceManager()
while setup.x:
setup.menu()
setup.controls()
我希望我能幫助你嗎?
uj5u.com熱心網友回復:
在您的函式x中分配的是創建一個僅在函式內部可見的新區域變數。您需要使用關鍵字從函式內部訪問或改變全域變數。另外,請注意,回傳的值無效,因為內部呼叫不使用該值。Truequit()globalxxcontrol()
def quit(self):
global x
x = False
不過,使用像這樣的全域變數通常是一種反模式,因此您應該考慮將其更改x為類的屬性并在主回圈中檢查它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/446017.html
