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

调用self.Reflector(xchar)报错:'str'对象不可调用

类方法调用报错:'str' object is not callable

错误信息

Traceback (most recent call last): File "/Users/.../Encrypt.py", 
line 35, in <module> Cipher = machine.Process_Message(Message,
replace_char=replaceVal)
File "/Users/.../EGdevice.py", line 104, in Process_Message code = self.Encode(char)
File "/Users/.../EGdevice.py", line 136, in Encode
xchar = self.Reflector(xchar)
TypeError: 'str' object is not callable
dennis@MBP2021 enigma %

相关代码片段

def Encode(self, char):
    # Run charactor through the process
    logging.info(f'Original char: {char}')

    xchar = self.Plug_Board(char)
    logging.info(f'Recived Plugboard char: {xchar}')

    self.Rotate_Rotors()

    xchar = self.Thru_Roters_Forward(xchar)
    logging.info(f'Recive Forword Rotor char: {xchar}')

    xchar = self.Reflector(xchar)
    logging.info(f'Recived Relector char: {xchar}')

    xchar = self.Thru_Roters_Backword(xchar)
    logging.info(f'Recive Backward Rotor char: {xchar}')

    xchar = self.Plug_Board(xchar)
    logging.info(f'Last Plugboard char: {xchar}')

    return str(xchar)

def Thru_Roters_Forward(self, char):
    # Run thru the rotors from right to left.
    for x in reversed(range(self.rotorCount)):
        pos = int(self.rotorDetails[x][1])
        xchar = str(self.rotorDetails[x][3][pos][0])
    logging.info(f'Input: {char} Returned: {xchar}')
    return str(xchar)

def Reflector(self, char):
    xchar = self.Reflector[(ord(char) - 65) % 26]
    logging.info(f'Input: {char} Returned: {xchar}')
    return str(xchar)

日志输出

2023.03.15 19:48:30|INFO|
>> FNC: Process_Message()
   MSG: Input data: This is the day the Lord has made. Be glad and rejoice.

2023.03.15 19:48:30|INFO|
>> FNC: Encode()
   MSG: Original char: T

2023.03.15 19:48:30|INFO|
>> FNC: Plug_Board()
   MSG: Input: T Returned: M

2023.03.15 19:48:30|INFO| 
>> FNC: Encode()
   MSG: Recived Plugboard char: M

2023.03.15 19:48:30|INFO|
>> FNC: Thru_Roters_Forward()
   MSG: Input: M Returned: K

2023.03.15 19:48:30|INFO|
>> FNC: Encode()
   MSG: Recive Rotor char: K

问题说明

处理字符串时,前两次类方法调用正常,但调用self.Reflector(xchar)时触发上述错误。已尝试确保返回值为字符串,仍无法解决。

解决方案

核心问题是实例属性与方法重名:
你的类中,存储反射器字符映射的实例属性(比如self.Reflector)和类方法Reflector同名了,导致self.Reflector指向的是字符串类型的属性,而非方法,调用时自然触发“字符串不可调用”的错误。

修正步骤:

  1. 修改存储反射器映射的实例属性名称,比如改为self.reflector_map(避免与方法名冲突);
  2. 更新Reflector方法内的访问代码:
def Reflector(self, char):
    # 使用改名后的实例属性访问映射
    xchar = self.reflector_map[(ord(char) - 65) % 26]
    logging.info(f'Input: {char} Returned: {xchar}')
    return str(xchar)

同时检查类的初始化代码,确保反射器映射的变量名是修改后的self.reflector_map,避免再次出现命名冲突。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:55:01