python的静态方法
‘壹’ 求助python高手,Python里有静态方法和私有方法,这两者有什么区别呢
静态方法不能访问实例的属性,私有访问只能在类的内部访问,不能被实例访问,详细看代码:
classPerson:
age=0
wegiht=0
__sex=''
def__init__(self):
pass
@staticmethod
defget_stactic_age():
Person.age+=1#这里不能用self.age访问
def__add(self):
print("这是一个私有方法,只能在类中使用")
defget_weight(self):
print("这是一个公有方法,可以被类的实例使用")
tom=Person()
tom.get_weight()#这个可以正常访问
tom.__add()#这个不能正常访问,报AttributeError:'Person'objecthasnoattribute'__add'异常
‘贰’ python里面的静态方法是不是不能递归
在类里面定义的函数就是方法,类方法需要@ classmethod 修饰并且有个隐藏参数 cls,实例方法必须有个参数 self, 静态方法必须有 @staticmethod修饰,类和实例都可以访问静态方法,实例可以访问实例方法也可以访问类方法
类可以访问类方法也可以访问实例方法,访问实例方法必须要带参数 self, 可以理解为类其实也是一个实例,类访问实例方法不带参数会报错的.类本身可以访问函数,实例却不行.
‘叁’ python中静态方法和类方法的区别
Python的类就是个语法糖。一个函数写在类里面和写在类外面没有区别,唯一的区别就是参数,所谓实例方法就是第一个参数是self,所谓类方法就是第一个参数是class,而静态方法不需要额外的参数,所以必须区分。
‘肆’ python类方法和静态方法有什么用
主要特点就是需要绑定到一个对象上,python解析器会自动把实例自身传递给方法,如14行所示,而直接使用InstanceMethod.f1()调用方法是不行的。
class InstanceMethod(object):
def __init__(self, a):
self.a = a
def f1(self):
print 'This is {0}.'.format(self)
def f2(self, a):
print 'Value:{0}'.format(a)
if __name__ == '__main__':
# im = InstanceMethod()
im = InstanceMethod('233')
im.f1()
# im.f2()
im.f2(233)
‘伍’ python 为什么要使用静态方法
Python使用静态方法类似函数工具使用,一般尽量少用静态方法。
Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的:
1)静态方法无需传入self参数,类成员方法需传入代表本类的cls参数;
2)从第1条,静态方法是无法访问实例变量的,而类成员方法也同样无法访问实例变量,但可以访问类变量;
3)静态方法有点像函数工具库的作用,而类成员方法则更接近类似Java面向对象概念中的静态方法。