属性分为实例属性与类属性
方法分为普通实例方法,类方法,静态方法
Python的静态方法和类方法都可以被类或实例访问,两者的区别还是很明显的:
1)静态方法无需传入self参数,类方法需传入代表本类的cls参数;
2)从第1条,静态方法是无法访问实例属性的,而类方法也同样无法访问实例变量,但可以访问类属性;
3)静态方法有点像函数工具库的作用,而类方法则更接近类似Java面向对象概念中的静态方法。
#!/usr/bin/python
#-*-coding:utf-8 -*-
class Test(object):
val1 = "我是类属性val1"
def __init__(self):
self.name = "我是实例属性self.name"
print "-"*30
def test1(self):
print "tes1"
print "我是普通实例方法"
print "肯定能调用类属性",Test.val1,
print "我被test1调用了"
print "还能调用实例属性",self.name,
print "我被test1调用了"
print self
print "-"*30
@classmethod
def test2(cls): #必须传入cls,以区别和其他方法
print "test2"
print "我是类方法"
print "我可以调用类属性,但是不能调用实例属性"
print Test.val1,
print "我被test2调用了"
print cls
#print self.name 不能调用实例属性,否则会报错,静态方法也一样
print "-"*30
@staticmethod
def test3(): #静态方法可以不用带参数
print "test3"
print "我是静态方法"
print "可以调用类属性,但是不能调用实例属性"
print Test.val1,
print "我被test3调用了"
print "-"*30
if __name__ == "__main__":
t = Test()
t.test1()
t.test2()
t.test3()