如何将列表中的对象分配给变量?
How to assign an object in a list to a variable?
我有一个存储 User
个对象的列表:
profiles_catalog = []
和 'User' 对象:
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
这应该是一个约会应用程序,如 tinder 之类的,它会向用户显示随机个人资料,并且它应该能够喜欢个人资料或继续查看其他个人资料。
为此,我编写了函数 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
存储在 profiles_catalog
中的随机 User
对象?
或者有什么其他方法可以解决这个问题?
使用您当前的代码,您可以定义 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
class 如您所写,要访问 model_like_profile
中定义的功能,您可以更改为:
liking_user.model_like_profile(liking_user, liked_user)
至:
liking_user.model_like_profile = liked_user
虽然使用 属性 setter 添加到列表通常不是好的做法 - 属性 setter 通常用于分配新值,不添加到列表中。此外,属性 setter 的方法名称最好与 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
我有一个存储 User
个对象的列表:
profiles_catalog = []
和 'User' 对象:
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
这应该是一个约会应用程序,如 tinder 之类的,它会向用户显示随机个人资料,并且它应该能够喜欢个人资料或继续查看其他个人资料。
为此,我编写了函数 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
存储在 profiles_catalog
中的随机 User
对象?
或者有什么其他方法可以解决这个问题?
使用您当前的代码,您可以定义 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
class 如您所写,要访问 model_like_profile
中定义的功能,您可以更改为:
liking_user.model_like_profile(liking_user, liked_user)
至:
liking_user.model_like_profile = liked_user
虽然使用 属性 setter 添加到列表通常不是好的做法 - 属性 setter 通常用于分配新值,不添加到列表中。此外,属性 setter 的方法名称最好与 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