SDLop 2024-12-31 16:57 采纳率: 100%
浏览 12
已结题

关于#python#的问题:TypeError: Ot.is_same_deep() takes 2 positional arguments but 3 were given

class Ot():
    def __init__(self,text,_type=str):
        self.text=text
        self._type=_type
    @classmethod
    def is_same_deep(text,text2):
        if id(text) == id(text2):
            return True
        else:
            return False
    def is_same_slight(text,text2):
        if text == text2:
            return True
        else:
            return False
        


print(Ot.is_same_deep("aaa","aaa"))
        

传出了一个错误:

Traceback (most recent call last):
  File "C:/Users/Admin/Documents/Lib/ot.py", line 33, in <module>
    print(Ot.is_same_deep("aaa","aaa"))
TypeError: Ot.is_same_deep() takes 2 positional arguments but 3 were given

麻烦大家帮我看一下

  • 写回答

4条回答 默认 最新

  • CLLLLLLY 2024-12-31 17:00
    关注
    我长期活跃于技术社区,热衷于帮助他人解决各类技术难题。很高兴在 CSDN 上回答你的问题,让我们一起探讨,找到解决问题的最佳方案吧。
    以下是对这个问题的分析和解决:

    错误原因分析

    • 在Python中,类方法(@classmethod装饰的方法)的第一个参数约定为cls,表示类本身。当你调用Ot.is_same_deep("aaa", "aaa")时,Python会自动将类Ot作为第一个参数传递给is_same_deep方法,导致该方法接收到了3个参数(Ot"aaa""aaa"),而你定义的is_same_deep方法只接受2个参数,所以抛出了TypeError

    修正后的代码

    class Ot():
        def __init__(self, text, _type=str):
            self.text = text
            self._type = _type
    
        @classmethod
        def is_same_deep(cls, text, text2):  # 将第一个参数改为cls
            if id(text) == id(text2):
                return True
            else:
                return False
    
        def is_same_slight(self, text, text2):
            if text == text2:
                return True
            else:
                return False
    
    # 调用方式需要注意,类方法通过类名调用,实例方法通过实例调用
    print(Ot.is_same_deep("aaa", "aaa"))  
    

    测试案例

    • 测试相同字符串
    print(Ot.is_same_deep("bbb", "bbb"))  # 输出True,因为相同字符串在某些情况下可能有相同的id
    
    s1 = "ccc"
    s2 = "ccc"
    print(Ot.is_same_deep(s1, s2))  # 输出True
    
    # 对于不同对象但值相同的情况
    l1 = [1, 2, 3]
    l2 = [1, 2, 3]
    print(Ot.is_same_deep(l1, l2))  # 输出False,因为l1和l2是不同的对象,id不同
    
    
    • 测试实例方法
    ot1 = Ot("hello")
    ot2 = Ot("world")
    # 以下会报错,因为is_same_slight是实例方法,需要通过实例调用
    # print(Ot.is_same_slight(ot1.text, ot2.text))  
    print(ot1.is_same_slight(ot1.text, ot2.text))  # 输出False,因为"hello"和"world"不相等
    
    

    通过上述修改和测试案例,你的代码应该能正常工作并且符合Python的类和方法调用的规范。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 1月9日
  • 已采纳回答 1月1日
  • 创建了问题 12月31日