在做 Python 项目的时候, 有时候会遇到一些摸不着头脑的问题, 就记录一下, 毕竟有的答案真的是摸不着头脑, 慢慢理解吧
- TypeError:xXxx() takes at least 2 arguments (1 given)
- 问题描述:
- 昨天运行的时候都是正常的, 邮件也正常发送, 但是今天早上来, 一运行就各种如上的报错
- 问题解决:
- 这个问题在网上说是在引入的包中出现了同名但不同参数的方法所致, 但是在我这里没有这个问题, 没有
from <module> import *
的操作 - 最后发现, 昨天在下班的时候发现有个方法警告:
Method xxx may be 'static'
, 于是就在这个方法上加了一个标签:@staticmethod
, 这个时候就出现问题了静态方法是没有 self 的, 所以各种问题扑面而来, 好吧, 我错了, 把@staticmethod
干掉吧
- 这个问题在网上说是在引入的包中出现了同名但不同参数的方法所致, 但是在我这里没有这个问题, 没有
- 问题指引:
- 学习 Python 的静态方法
简单记录一下classmethod和staticmethod的区别:
-
classmethod
是类方法,而staticmethod
是静态方法。
在python中,静态方法和类方法都是可以通过类对象和类对象实例访问。但是区别是:@classmethod
是一个函数修饰符,它表示接下来的是一个类方法,类方法的第一个参数cls
,而实例方法的第一个参数是self
,表示该类的一个实例。 - 普通对象方法至少需要一个self参数,代表类对象实例
类方法有类变量cls
传入,从而可以用cls做一些相关的处理。并且有子类继承时,调用该类方法时,传入的类变量cls
是子类,而非父类。 对于类方法,可以通过类来调用,比如说A是一个类,那么我们可以通过A.method()
来调用A里面的method方法, 也可以通过类的一个实例来调用,如A().method()
进行调用,首先A()
方法会调用A的初始化方法进行实例化出一个A的对象,然后通过该对象调用method方法。
静态方法则没有上述方法,它基本上跟一个全局函数相同,一般来说用的很少
- 问题描述:
网友评论