我有一個類介面:
class Interface:
def __init__(self):
self.users_list = []
self.admins_list = []
self.categories_list = []
self.current_user = ''
self.user_flag = 0
@staticmethod
def start_menu(self):
print('Add user')
create_user()
show_menu()
@staticmethod
def create_user(self):
# code....
@staticmethod
def choose_user(self):
# code...
# call
inter = Interface()
inter.start_menu()
我得到了同樣的錯誤:
Traceback (most recent call last):File "C:\Users\79268\Downloads\store.py", line 191, in <module>
inter.start_menu()
TypeError: Interface.start_menu() missing 1 required positional argument: 'self'
我不知道問題出在哪里,這篇文章的建議(TypeError: Missing 1 required positional argument: 'self')沒有幫助?
uj5u.com熱心網友回復:
靜態方法只使用類的命名空間。它可以使用類變數,但不能使用特定于物件的變數 ( self)。
如果它們都是靜態方法,那么您應該將代碼更改如下,因為self靜態方法中沒有 of 的概念。
class Interface:
users_list = []
admins_list = []
categories_list = []
current_user = ''
user_flag = 0
@staticmethod
def start_menu():
print('Add user')
Interface.create_user()
Interface.show_menu()
@staticmethod
def create_user():
# code....
@staticmethod
def choose_user():
# code...
# call
Interface.start_menu()
如果需要,通過洗掉裝飾self器使這些方法成為實體方法。staticmethod此外,由于您沒有建構式的引數,因此您可以將這些變數設為靜態,如上所示。
class Interface:
def __init__(self):
self.users_list = []
self.admins_list = []
self.categories_list = []
self.current_user = ''
self.user_flag = 0
def start_menu(self):
print('Add user')
self.create_user()
self.show_menu()
def create_user(self):
# code....
def choose_user(self):
# code...
# call
inter = Interface()
inter.start_menu()
由于上述限制,實體方法(參考物件的方法,即self)可以呼叫靜態方法,反之則不行。
uj5u.com熱心網友回復:
請閱讀檔案中的靜態方法。
當您保存users_list實體時,我假設您希望在其他方法中使用這些變數。在這種情況下,您不需要@staticmethod.
重構start_menu:
def start_menu(self):
print('Add user')
self.create_user()
self.show_menu()
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/442511.html
標籤:Python python-3.x
下一篇:如何使用moto庫模擬硬依賴
