python中的静态方法与类成员

前言

因为python的水平目前一直是处于能用阶段,平时写的脚本使用的python的写法也比较的简单,没有写过稍微大一点的项目。对python中的类,类之间的组织关系,整个项目中类之间如何耦合还缺乏认识。打算读一读别人写的python代码来学习一下python在工程中的应用,提升自己的技术水平。选取的python代码是python爬虫代码,github地址。这个代码刚好是符合跳出我的舒适区的水平的代码,因此很适合我目前的水平来学习。

在python2.4之后,主要使用装饰器来实现静态方法和类方法。

装饰器使用@操作符,例子如下:

class example:
val1 = “value 1”
def __init__(self):
self.val2 = “value 2”
@staticmethod
def staticmd():
print(“静态方法,无法访问value1和value2″)
@classmethod
def classmd(cls):
print(‘类方法,类:’+str(cls)+”,val1:”+cls.val1+”,无法访问val2的值”)
example = example()
example.staticmd() #实例调用静态方法,无法访问实例变量val1和val2
example.classmd() #实例调用类方法,输出结果:类方法,类:,val1:value 1,无法访问val2的值
example.classmd() #类调用类方法,输出结果:类方法,类:,val1:value 1,无法访问val2的值
example.val1 = “the instance value1 changed”
example.classmd() #类调用类方法,输出结果:类方法,类:,val1:value 1,无法访问val2的值
example.val1 = “the class value2 changed”
example.classmd() #类调用类方法,输出结果:类方法,类:,val1:the class value2 changed,无法访问val2的值
example.classmd() #类调用类方法,输出结果:类方法,类:,val1:the class value2 changed,无法访问val2的值

相信从上面的例子中,就可以很明显地分辨出静态方法和类方法的区别了。

先是在语法上面的区别:

静态方法不需要传入self参数,类成员方法需要传入代表本类的cls参数;

静态方法是无妨访问实例变量和类变量的,类成员方法无法访问实例变量但是可以访问类变量

使用的区别:

由于静态方法无法访问类属性,实例属性,相当于一个相对独立的方法,跟类其实并没有什么关系。这样说来,静态方法就是在类的作用域里的函数而已。

更多python中的静态方法与类成员相关文章请关注php中文网!

Posted in 未分类

发表评论