You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python跨类调用类变量报错:Socket服务中com_socket无法调用recv方法

解决AttributeError: 'str' object has no attribute 'recv'问题

问题根源

你在server.py中初始化了Setup实例并调用make_server()完成了Socket连接,此时该实例的com_socket是有效的Socket对象。但在verify.py里,你重新创建了一个全新的Setup实例,这个新实例的com_socket还是初始化时的空字符串"",自然没有recv()方法,导致报错。

解决方案

将server.py中已经完成初始化和连接的Setup实例传递给Verify类,让Verify复用同一个实例,而不是自己创建新的。

修改后的代码:

  1. server.py
import socket
import threading
from verify import Verify
from setup import Setup


setup = Setup()
# 将已初始化的setup实例传入Verify
verify = Verify(setup)

setup.make_server()
verify.verify()
  1. verify.py
class Verify:
    def __init__(self, setup_instance):
        # 保存传入的已初始化setup实例
        self.setup = setup_instance

    def verify(self):
        # 使用复用的setup实例中的socket对象
        message = self.setup.com_socket.recv(1024).decode('utf-8')
        # 可继续添加message处理逻辑

额外优化建议

在setup.py中修正类型标注,让代码更严谨:

import socket

class Setup:
    def __init__(self):
        self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.client_list: list = []
        # 初始化为None,明确类型为socket对象或None
        self.com_socket: socket.socket | None = None
        # accept返回的是(ip, port)元组,修正类型标注
        self.addr: tuple[str, int] | None = None
        self.current_id: int = 0

    # make_server方法保持不变

内容的提问来源于stack exchange,提问作者ACarrot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 14:47:23