问题Missing 1 required positional argument引出的关于python实例化的经验教训

由问题Missing 1 required positional argument引出的关于python实例化的经验教训,及实例化的具体步骤

最近在刷leetcode,想把写出的算法输出个结果验证一下,于是乎遇到了这个坑,以前自己写代码都是赶着写,或者百度个框架改改,从来没在意过类似的细节,因此立贴于此,要改正这一缺点,学透这门语言为己所用,谨以此贴引以为戒!

class Solution:
    def mySqrt(self, x):
        """
        计算并返回 x 的平方根,其中 x 是非负整数。
        由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
        :type x: int
        :rtype: int
        """
        l = 0
        r = x
        y = l + (l + r) / 2
        if x <= 1:
            return x
        else:
            while l <= r:
                if y * y == x:
                    return y
                elif y * y > x:
                    r = y - 1  # 注意是y-1,后面是y+1,不要写成r-1!
                else:
                    l = y + 1
                y = (l + r) // 2
        return y


if __name__ == '__main__':
    a = 16
    mm = Solution()  # TODO 1.创建对象时,只需使用类名,且类名后面要带括号!
    ss = mm.mySqrt(a)  # TODO 2.然后使用创建的对象调用该类的方法,并把调用该方法得到的结果赋值给变量ss
    print(mm, ss)

记录犯的错误,不要再重蹈覆辙!
1.创建对象时候写成了 mm = Solution(a),运行就会提示 TypeError: mySqrt() missing 1 required positional argument: 'x'
2.另外,python实例化(创建对象)时写成mm = Solution也不可以,不带括号,因为不加括号就不是启动实例,这个和设置一个别名是一样的(说白了 加括号就是调用init函数 不加括号就是不调用init函数,不调用init函数就无法使用参数吧。这种描述可能不够准确,欢迎大神指正!)

另外,Python中self用法详解:https://blog.csdn.net/CLHugh/article/details/75000104

你可能感兴趣的:(python)