静态属性:即将类的函数通过@property属性封装,封装后实例调用该函数时,不再需要在函数后面加(),而是用类似调用数据属性的方式直接调用函数名称即可执行函数。

静态属性既可以访问类的属性,也可以访问实例的属性。

类方法:即在类的函数前加@classmethod属性,函数第一个参数为cls类,表示该函数是类的方法,而不需要绑定具体实例。

在类方法里面可以调用类的属性,并且在类调用该函数时,会将自身作为第一个参数传入,类方法不能访问实例。实例可以调用类方法。

静态方法,即在类的函数前加@staticmethod属性,函数参数既没有cls类,也没有self实例,表示该函数是类的工具包,与类本身和实例都没有绑定关系。

静态方法由于没有类和实例参数,所以不能访问类和实例的属性。实例可以调用静态方法。

普通方法:指既没有上述三种修饰符,也不是常规的函数的方法,可以定义,类可以调用但实例不能调用,这种方法其实是没有意义的,不建议使用。实例不能调用普通方法。

class room:
tag=1
def __init__(self, name,length,width,height):
self.name=name
self.length=length
self.width=width
self.height=height
@property #通过类提供的property对求面积的函数进行封装
def square(self):
s=self.length*self.width
print('%s的面积为%s'%(self.name,s))
@classmethod
def volumn(cls,length,width,height): #第一个参数为cls,即类
v=length*width*height
print('访问类的属性%s'%cls.tag) #类方法可以访问类的属性
print('类%s的体积为%s'%(cls,v))
@staticmethod
def haha(x,y): #静态方法既没有类cls参数,也没有实例self参数,因此不能访问类和实例的属性
print('From staticmethod,%s and %s is haha'%(x,y))
def hahahaha(x,y): #可以这样定义普通方法,但不建议这样使用,没有意义
print('From common method,%s and %s is hahahaha' % (x, y))
room1=room('room1',10,13,3)
room1.square #直接调用求面积的函数方法就可以执行函数,而不需要加()
room.volumn(10,13,3) #类调用类方法时,将类自身作为第一个参数传入
room.haha('Jane','Alan')
room.hahahaha('Jane','Alan') # 执行结果:
# room1的面积为130
# 访问类的属性1
# 类<class '__main__.room'>的体积为390
# From staticmethod,Jane and Alan is haha
# From common method,Jane and Alan is haha

python静态属性@property、类方法@classmethod、静态方法@staticmethod和普通方法的更多相关文章

  1. python之静态属性、类方法、静态方法

    静态属性.类方法.静态方法 1. 静态属性:在函数前加@property,将函数逻辑”封装“成数据属性,外部直接调用函数名,如同调用属性一样.这个函数是可以调用类和实例的属性的,    静态属性的作用 ...

  2. day25、 静态属性、类方法、静态方法、组合、继承、

    一. 静态属性.类方法.静态方法 1.1静态属性 class Room: def __init__(self,name,owner,width,length): self.name=name self ...

  3. python_14 静态属性、类方法、静态方法;组合;继承

    静态属性 在类中函数前加@property,在实例调用函数时无需加(),将函数属性封装,调用时看起来与数据属性类似 将函数封装成数据属性的形式,外部调用时看不到逻辑,静态属性可以访问实例属性也可以访问 ...

  4. 《Python》 property、classmethod、staticmethod、isinstance、issubclass

    一.property property是一个装饰器函数 装饰器函数的使用方法:在函数.方法.类的上面一行直接@装饰器的名字 装饰器的分类: 1.装饰函数 2.装饰方法:property 3.装饰类 i ...

  5. python类方法@classmethod与@staticmethod

    目录 python类方法@classmethod与@staticmethod 一.@classmethod 介绍 语法 举例 二.@staticmethod 介绍 语法 举例 python类方法@cl ...

  6. Day8 封装 静态属性property

    封装:将类的属性隐藏 #先看如何隐藏 1,在定义的属性之前加入__. class Foo: __N=111111 #_Foo__N def __init__(self,name): self.__Na ...

  7. 静态属性property

    静态属性property(是通过对象去使用) property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值 1 . 通过@property修饰过的函数属性,调用的时候无需在加() cla ...

  8. 静态属性property的本质和应用

    一.本质 静态属性property本质就是实现了get,set,delete三种方法 class Foo: @property def AAA(self): print('get的时候运行我啊') @ ...

  9. Python学习第十六课——静态属性(property, classmethod, staticmethod)

    计算所居住房子的面积 普通写法 class Room: def __init__(self,name,owner,width,length,heigh): self.name=name self.ow ...

随机推荐

  1. 论文阅读-使用隐马模型进行NER

    Named Entity Recognition in Biomedical Texts using an HMM Model  2004年,引用79 1.摘要 Although there exis ...

  2. Centos的升级与更新

    系统升级(6.5->7.2): 这里拿Centos6升级到Centos7为例: 1.查看当前CentOS版本cat /etc/redhat-release 2.更新源vim /etc/yum.r ...

  3. selenium python3

    安装pip3 install selenium 查看版本pip3 show selenium 安装后还是提示找不到相应的模块 Mac安装PyCharm后,将已有工程导入,之前使用Mac终端执行脚本时正 ...

  4. Linux系统查看日志信息总结

    命令: cat tail -f #系统日志文件存放路径: /var/log/message #系统启动后的信息和错误日志 /var/log/secure #与安全相关的日志信息 /var/log/ma ...

  5. Selenium基础知识(七)弹出框处理

    使用switch_to.alert方法来处理弹页面弹出的警告框 页面常见警告框种类:alert/confirm 确认框/prompt switch_to.alert().accept() switch ...

  6. POJ 2752 Seek the Name,Seek the Fame(KMP,前缀与后缀相等)

    Seek the Name,Seek the Fame 过了个年,缓了这么多天终于开始刷题了,好颓废~(-.-)~ 我发现在家真的很难去学习,因为你还要陪父母,干活,做家务等等 但是还是不能浪费时间啊 ...

  7. js区别手机和电脑打开网页

    Navigator对象 首先来了解一下Navigator 对象,Navigator 对象包含有关浏览器的信息,下面的userAgent 属性是一个只读的字符串,声明了浏览器用于 HTTP 请求的用户代 ...

  8. linux中使用另一用户打开拥有图形界面的程序

    在archlinux中使用oracle用户执行oui无法显示图形界面的问题.结果没解决,后来发现执行 xhost +si:localuser:oracle, 然后再使用oracle用户执行oui即可. ...

  9. c++将lambda作为callback函数

    想用c++发送http_post请求,用到了libcurl. 想将其包装一下,因为默认http的响应结果是打印到stdout的,如果想将响应结果另外处理,需要自己定义一个callback函数. 考虑到 ...

  10. python ---多进程 Multiprocessing

    和 threading 的比较 多进程 Multiprocessing 和多线程 threading 类似, 他们都是在 python 中用来并行运算的. 不过既然有了 threading, 为什么 ...