Python面向对象之静态属性、类方法与静态方法分析


Posted in Python onAugust 24, 2018

本文实例讲述了Python面向对象之静态属性、类方法与静态方法。分享给大家供大家参考,具体如下:

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

# -*- coding:utf-8 -*-
class Room:
  def __init__(self,name,owner,width,length):
    self.name = name
    self.owner = owner
    self.width = width
    self.length = length
  @property
  def cal_area(self):
    return self.length * self.width
r1 = Room('卧室','alex',100,1000)
print(r1.cal_area)
#r1.cal_area = 10  并不是真实的数据属性,所以不可以在外部直接赋值。

运行结果:

100000

2. 类方法:在类的方法前添加@classmethod,不需要实例化,直接调用类的该方法。可以访问类的数据属性,但是不可以访问对象的数据属性。

# -*- coding:utf-8 -*-
class Room:
  style = '别墅'
  def __init__(self,name,owner,width,length):
    self.name = name
    self.owner = owner
    self.width = width
    self.length = length
  @property
  def cal_area(self):
    return self.length * self.width
  @classmethod
  def tell_style(cls):
    #这么写会报错,因为name是对象的数据属性,而类方法是不可以访问实例的属性的
    #print('%s的房间风格是%s'%(cls.name,cls.style))
    print('房间的风格是%s'%(cls.style))
#类方法的定义只是为了类去调用
Room.tell_style()

运行结果:

房间的风格是别墅

3. 静态方法:在类的方法前加@staticmethod,该方法只是名义上的归属类管理,实例和类的属性均不可以访问,仅仅是类的工具包。

# -*- coding:utf-8 -*-
class Room:
  style = '别墅'
  def __init__(self,name,owner,width,length):
    self.name = name
    self.owner = owner
    self.width = width
    self.length = length
  @property
  def cal_area(self):
    return self.length * self.width
  @classmethod
  def tell_style(cls):
    #这么写会报错,因为name是对象的数据属性,而类方法是不可以访问实例的属性的
    #print('%s的房间风格是%s'%(cls.name,cls.style))
    print('房间的风格是%s'%(cls.style))
  @staticmethod
  def shower():
    print("洗澡")
  def test(self):
    print("这不是静态方法,而且自动生成参数,必须要有实例")
Room.shower()
r1 = Room('别墅','alex',10,10)
r1.shower()  #这么调用也没有问题
#报错,因为不是静态方法,必须要实例化
Room.test()

运行结果:

洗澡
洗澡
Traceback (most recent call last):
  File "C:\py\3waterPyDemo\src\Demo\test.py", line 26, in <module>
    Room.test()
TypeError: unbound method test() must be called with Room instance as first argument (got nothing instead)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python3 正在毁灭 Python的原因分析
Nov 28 Python
在Linux下使用Python的matplotlib绘制数据图的教程
Jun 11 Python
python友情链接检查方法
Jul 08 Python
Python使用设计模式中的责任链模式与迭代器模式的示例
Mar 02 Python
python实现定时提取实时日志程序
Jun 22 Python
python之文件读取一行一行的方法
Jul 12 Python
使用Python处理BAM的方法
Sep 28 Python
python twilio模块实现发送手机短信功能
Aug 02 Python
Python多线程正确用法实例解析
May 30 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
Mar 02 Python
利用Python+OpenCV三步去除水印
May 28 Python
基于PyTorch实现一个简单的CNN图像分类器
May 29 Python
python中文编码与json中文输出问题详解
Aug 24 #Python
详解Django解决ajax跨域访问问题
Aug 24 #Python
Python面向对象之反射/自省机制实例分析
Aug 24 #Python
Python使用装饰器模拟用户登陆验证功能示例
Aug 24 #Python
Python日志模块logging基本用法分析
Aug 23 #Python
Python多继承原理与用法示例
Aug 23 #Python
Python抽象和自定义类定义与用法示例
Aug 23 #Python
You might like
记录Yii2框架开发微信公众号遇到的问题及解决方法
2018/07/20 PHP
php提供实现反射的方法和实例代码
2019/09/17 PHP
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
2012/02/03 Javascript
js修改table中Td的值(定义td的双击事件)
2013/01/10 Javascript
捕获键盘事件(且兼容各浏览器)
2013/07/03 Javascript
js为什么不能正确处理小数运算?
2015/12/29 Javascript
JS对HTML表格进行增删改操作
2016/08/22 Javascript
简单理解vue中实例属性vm.$els
2016/12/01 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
2017/08/18 Javascript
node实现定时发送邮件的示例代码
2017/08/26 Javascript
JS switch判断 三目运算 while 及 属性操作代码
2017/09/03 Javascript
vuex 解决报错this.$store.commit is not a function的方法
2018/12/17 Javascript
如何在Vue.js中实现标签页组件详解
2019/01/02 Javascript
JS实现处理时间,年月日,星期的公共方法示例
2019/05/31 Javascript
layer父页获取弹出层输入框里面的值方法
2019/09/02 Javascript
js实现点击上传图片并设为模糊背景
2020/08/02 Javascript
Vue触发input选取文件点击事件操作
2020/08/07 Javascript
[49:02]KG vs Infamous 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
[01:33]完美世界DOTA2联赛PWL S3 集锦第二期
2020/12/21 DOTA
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
跟老齐学Python之Python文档
2014/10/10 Python
Python读写文件方法总结
2015/06/09 Python
python常用函数详解
2016/09/13 Python
Django实现跨域的2种方法
2019/07/31 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
泰坦健身器材:Titan Fitness
2018/02/13 全球购物
前台领班岗位职责
2013/12/04 职场文书
实习评语大全
2014/04/26 职场文书
学习保证书范文
2014/04/30 职场文书
优质服务演讲稿
2014/05/14 职场文书
城市轨道交通工程职业生涯规划书范文
2014/09/16 职场文书
党员干部批评与自我批评反四风思想汇报
2014/09/21 职场文书
祖国在我心中演讲稿(小学生)
2014/09/23 职场文书
2014教师评职称工作总结
2014/11/10 职场文书
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python