初次了解python里的__dict__属性,看到这篇博客里的这段代码:
(已经将部分python2语法改为python3语法了)
class A(object):
"""
Class A.
"""
a = 0
b = 1
def __init__(self):
self.a = 2
self.b = 3
def test(self):
print('a normal func.')
@staticmethod
def static_test(self):
print('a static func.')
@classmethod
def class_test(self):
print('a class func.')
obj = A()
print(A.__dict__)
print(obj.__dict__)
因为python里的静态方法和类方法也是第一次使用,所以各种仔细研究,发现调用静态方法时一直报错:
TypeError: static_test() missing 1 required positional argument: ‘self’
最后才知道了静态方法不需要self参数,直接去掉self参数就好,估计这是静态方法一个特殊的地方;
然而类方法的self参数不可以去掉,去掉则会报错。
对于这个错误不知道是不是python2和python3的差异引起的,个人提醒大家得注意一下这个问题哦!
另外,只有标记了@staticmethod的方法才是静态方法,只有标记了@classmethod的方法才是类方法!
改进代码如下:
class A(object):
"""
Class A.
"""
a = 0
b = 1
def __init__(self):
self.a = 2
self.b = 3
def test(self):
print('a normal func.')
@staticmethod
def static_test():
print('a static func.')
@classmethod
def class_test(self):
print('a class func.')
obj = A()
print(A.__dict__)
print(obj.__dict__)
#通过类对象调用函数:
obj.test()
obj.static_test() #或通过类名来调用:A.static_test()
obj.class_test()
至于这几种函数的具体用法是什么样的,我打算之后再去研究,目前先把它们的基本定义形式和调用方法了解清楚。