您的位置:首页 > 编程语言 > Python开发

python实例方法、类方法@classmethod、静态方法@staticmethod和属性方法@property区别

2019-03-06 15:35 302 查看

 

1、#类方法@classmethod,只能访问类变量,不能访问实例变量,通过cls参数传递当前类对象,不需要实例化,直接【类名.方法名()】,可通过类对象和类对象实例访问

类方法:第一个参数强制为类对象,可以通过这个类对象访问类属性,由于没有传入类实例对象,所以不能访问类实例属性。

2、#静态方法@staticmethod,名义归类管,实际跟类没关系,跟类关联截断了,是类下单独的函数,可以不传递任何参数,不需要实例化,直接【类名.方法名(),可通过类对象和类对象实例访问

类静态方法:无法访问类属性、类实例属性、没有默认的第一个参数,其实跟类没什么关系,只是绑定在类命名空间下的函数而已。

3、#实例方法,一般类下未带修饰符@是实例方法,需要实例化后调用

类实例方法:第一个参数强制为类实例对象,可以通过这个类实例对象访问类属性,可以通过类实例对象的

__class__
属性访问类属性。

[code]
class DemoClass(object):
name='橙子'
def __init__(self,name):
self.name=name
def objPrint(self,other):#实例方法
print("%s 是实例化方法:%s"%(self.name,other))
@classmethod
def classPrint(cls,other):#类方法
print('%s 是类方法,只能调类变量 %s'%(cls.name,other))
@staticmethod
def staticPrint(other):#静态方法
print('我是静态方法 %s'%other)
obj=DemoClass("橙汁")#实例化类
obj.objPrint("啦啦")
DemoClass.classPrint('傻傻')
DemoClass.staticPrint('静静')

C:\Users\wangli\PycharmProjects\AutoMation\venv\Scripts\python.exe C:/Users/wangli/PycharmProjects/AutoMation/case/test.py
橙汁 是实例化方法:啦啦
橙子 是类方法,只能调类变量 傻傻
我是静态方法 静静

Process finished with exit code 0

 

4、#属性方法@property,将类方法变为属性,并赋值

[code]class  test(object):
def __init__(self,name):
self.name=name
self.__food=None
@property
def wangli(self):#属性方法   方法改属性
print('%s is eating %s'%(self.name,self.__food))
@wangli.setter
def wangli(self,food):#属性赋值
print('set to food:',food)
self.__food=food
a=test('花花')
a.wangli
a.wangli='包子'
a.wangli

C:\Users\wangli\PycharmProjects\AutoMation\venv\Scripts\python.exe C:/Users/wangli/PycharmProjects/AutoMation/case/test.py
花花 is eating None
set to food: 包子
花花 is eating 包子

Process finished with exit code 0

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐