永发信息网

python 静态方法可以访问类方法吗

答案:1  悬赏:10  手机版
解决时间 2021-01-17 21:01
python 静态方法可以访问类方法吗
最佳答案
Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的:
1)静态方法无需传入self参数,类成员方法需传入代表本类的cls参数;
2)从第1条,静态方法是无法访问实例变量的,而类成员方法也同样无法访问实例变量,但可以访问类变量;
3)静态方法有点像函数工具库的作用,而类成员方法则更接近类似Java面向对象概念中的静态方法。

实现静态方法和类方法的两种方式
一、在Python 2.3及之前,用staticmethod和classmethod类型对象包装实现
例子如下(注意print里的说明):
class MyClass:
val1 = 'Value 1'
def __init__(self):
self.val2 = 'Value 2'
def staticmd():
print '静态方法,无法访问val1和val2'
smd = staticmethod(staticmd)

def classmd(cls):
print '类方法,类:' + str(cls) + ',val1:' + cls.val1 + ',无法访问val2的值'
cmd = classmethod(classmd)

执行:
>>> mc = MyClass()
>>> mc.smd()
>>> mc.cmd()
>>> MyClass.smd()
>>> MyClass.cmd()

二、在Python 2.4及之后,用装饰器(decorators)实现
装饰器使用@操作符,例子如下:
class MyClass:
val1 = 'Value 1'
def __init__(self):
self.val2 = 'Value 2'

@staticmethod
def staticmd():
print '静态方法,无法访问val1和val2'

@classmethod
def classmd(cls):
print '类方法,类:' + str(cls) + ',val1:' + cls.val1 + ',无法访问val2的值'
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
GB/T7124-2008与GB7124-1986有何区别?能
超五类1.5/3米网络网线跳线哪个好
无锈钢水壶的危害.
单选题将体积是50cm3,质量是40g的实心小球浸
单选题Was it _____ yesterday&nb
什么样的人最容易被炒鱿鱼
沈阳地铁 从营盘街到九一八怎么坐
杨云峰这个名字能打多少分数
混沌魔灵mdp(e2套装)和那些散件搭配
为什么地铁驾驶员在起步的时候要打一个向前指
卢龙县雷店子乡中学地址好找么,我有些事要过
红方印香烟多少钱1条
家里有个败家子怎么办???
背上拔罐两个多月了,还有黒印是什么原因
上联东字开头,下联升字开头做~春联
推荐资讯
异型铜材厂哪家质量好
请问屎怎样吃才会香,油炸还是清蒸
单选题下列情况中,不会造成大气污染的是A.利
在超纯水处理中。加盐的作用是什么
从都如何?入住感受咋样?
领克01多少钱
有9个圆片,摆成个数相同的两行,每行摆几个
河南那里种烤烟几月开烤
如何找到京东商城的登录密码
什么时间去香港卓悦购物最划算?
写出铜生锈的化学方程式(注:看图中的铜绿的
宫廷酸梅汤的做法,宫廷酸梅汤怎么做好吃,宫
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?