我有一個存盤User物件的串列:
profiles_catalog = []
和“用戶”物件:
cont = 1
class User:
def __init__(self, name, password):
global cont
self.registry = cont
self.name = name
self.password = password
self.liked = []
self.matches = []
cont = 1
def __str__(self) -> str:
return f'Registry: {self.registry}, Name: {self.name}, Password: {self.password}, Liked_list: {self.liked}, matches: {self.matches}'
def __dict__(self) -> dict:
return {'Registry': {self.registry}, 'Name': {self.name}, 'password': {self.password}, 'Liked list': {self.liked}, 'matches': {self.matches}}
@property
def call_name(self) -> None:
return self.name
@property
def call_password(self) -> None:
return self.password
@property
def call_liked_list(self) -> None:
return self.liked
@call_liked_list.setter
def model_like_profile(self, liked_user) -> None:
self.liked.append(liked_user)
return f'{liked_user.name} got liked'
def see_matches(self) -> None:
return self.matches
這應該是一個約會應用程式,如火種或其他東西,它向用戶顯示隨機組態檔,它應該能夠喜歡組態檔或繼續查看其他組態檔。
為此,我撰寫函式show_random_profile()和main_like_profile():
def show_random_profile():
displayed_user = profiles_catalog[randint(0, len(profiles_catalog) - 1)]
return displayed_user
和
def main_like_profile(control_user, displayed_user):
liking_user = control_user
liked_user = displayed_user
liking_user.model_like_profile(liking_user, liked_user)
print('User liked!')
但我不斷收到 TypeError:
Traceback (most recent call last):
File "c:\Users\Lucas\Documents\LUCAS\programacao\python\meus_projetos\twindder\controller.py", line 140, in <module>
main()
File "c:\Users\Lucas\Documents\LUCAS\programacao\python\meus_projetos\twindder\controller.py", line 109, in main
main_like_profile(control_user, displayed_user)
File "c:\Users\Lucas\Documents\LUCAS\programacao\python\meus_projetos\twindder\controller.py", line 34, in main_like_profile
liking_user.model_like_profile(liking_user, liked_user)
TypeError: 'list' object is not callable
我看到的方式,問題是list它被分配給一個應該接受的變數的物件User,對嗎?
如果是這樣,我如何分配給存盤在中displayed_user的隨機User物件profiles_catalog?
或者還有其他方法可以解決這個問題嗎?
uj5u.com熱心網友回復:
使用您當前的代碼,您可以定義應用model_like_profile了裝飾器的方法@call_liked_list.setter,其中call_liked_list是屬性。這使得model_like_profile也參考相同的call_liked_list屬性。所以,這條線:
liking_user.model_like_profile(liking_user, liked_user)
... 相當于liking_user.call_liked_list(liking_user, liked_user), 相當于liking_user.liked(liking_user, liked_user). 由于liking_user.liked是一個串列,這行代碼嘗試呼叫一個串列,就好像它是一個函式一樣,因此TypeError.
保持User您撰寫的類,以訪問定義的功能model_like_profile,您可以更改:
liking_user.model_like_profile(liking_user, liked_user)
至:
liking_user.model_like_profile = liked_user
雖然使用屬性設定器添加到串列通常不是好的做法 - 屬性設定器通常用于分配新值,而不是添加到串列中。此外,屬性設定器的方法名稱與 getter 的方法名稱相同是一種很好的做法:
class MyClass:
def __init__(self):
self._value = 1
@property
def value(self):
return self._value
@value.setter
def value(self, value):
self._value = value
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/485280.html
標籤:Python python-3.x 列表 哎呀 类型错误
