python - unpickling 类实例时不断收到“Property object at 0x”
问题描述
我正在尝试设置多线程服务器和客户端,并且当前正在发送包装在 TCP 模块类中的信息。我正在使用 pickle 发送数据,并且遇到了一个问题,即在 unpickling 数据后尝试访问实例变量会导致“0x 处的属性对象”,而不是实例变量。这是相关的服务器代码:
data = self.clientSocket.recv(2048)
print(data)
message = pickle.loads(data)
header = message.header
self.currUser = message.user
if header == 'user-login':
print("[recv] New login request")
self.userLogin()
客户端代码:
username = input("Username: ")
password = input("Password: ")
message = TCPmodule().withSocket("user-login", password, self.clientSocket)
message.user = username
print(message.header)
data = pickle.dumps(message)
self.clientSocket.send(data)
类(使用的类方法和 getter/setter):
def withSocket(self, header, content, socket):
self.header = header
self.content = content
self.socket = socket
self.user = ""
self.port = 0
return self
@property
def header(self):
return self._header
@header.setter
def header(self,value):
self._header = value
@property
def content(self):
return self._content
@content.setter
def content(self,content):
self._content = content
@property
def user(self):
return self._user
@user.setter
def user(self,user):
self._user = user
我打印(message.header)服务器端时的属性对象消息
对python有点陌生,所以我不确定我是否在这里遗漏了一些东西。谢谢
解决方案
推荐阅读
- c# - 在 C# 中比较数组的有效方法
- r - 如何替换一个变量的特定值?
- ruby-on-rails - Heroku H10 错误,但 web dynos 没有崩溃
- http-status-code-500 - Mod_sec 规则因 POST 中的十六进制 CR 或 LF 而失败
- terraform - 从本地安装提供程序时,terraform 无限期挂起
- javascript - 使用 traefik 和 Next JS 在子文件夹中发布站点
- asp.net - 根据项目值使列表视图中的复选框不可见
- c# - 有没有办法在对象的 JSON 表示中从模型中动态切换字段?
- angular - 为什么 Angular HttpClient 将字符串数组从 json 映射到对象数组?
- javascript - 使用 Redux 操作更新对象内的对象