由问题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