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 相关文章推荐
Python高级应用实例对比:高效计算大文件中的最长行的长度
Jun 08 Python
在 Python 应用中使用 MongoDB的方法
Jan 05 Python
Python数据分析之双色球中蓝红球分析统计示例
Feb 03 Python
使用Python实现租车计费系统的两种方法
Sep 29 Python
对Python中的条件判断、循环以及循环的终止方法详解
Feb 08 Python
python里dict变成list实例方法
Jun 26 Python
使用python获取邮箱邮件的设置方法
Sep 20 Python
windows下python安装pip方法详解
Feb 10 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
Apr 02 Python
解决python中显示图片的plt.imshow plt.show()内存泄漏问题
Apr 24 Python
从python读取sql的实例方法
Jul 21 Python
Python通用唯一标识符uuid模块使用案例
Sep 10 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
PHP模拟SQL Server的两个日期处理函数
2006/10/09 PHP
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
2007/02/11 PHP
防止本地用户用fsockopen DDOS攻击对策
2011/11/02 PHP
php使用自定义函数实现汉字分割替换功能示例
2017/01/30 PHP
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
2010/02/07 Javascript
预加载css或javascript的js代码
2010/04/23 Javascript
基于jquery的一个图片hover的插件
2010/04/24 Javascript
jquery getScript动态加载JS方法改进详解
2012/11/15 Javascript
node.js中的fs.fchmodSync方法使用说明
2014/12/16 Javascript
基于bootstrap3和jquery的分页插件
2015/07/31 Javascript
nodejs加密Crypto的实例代码
2016/07/07 NodeJs
Vue.js展示AJAX数据简单示例讲解
2017/03/29 Javascript
JavaScript中的return布尔值的用法和原理解析
2017/08/14 Javascript
JavaScript实现三级联动菜单效果
2017/08/16 Javascript
vue初尝试--项目结构(推荐)
2018/01/30 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
react组件从搭建脚手架到在npm发布的步骤实现
2019/01/09 Javascript
Vue CLI3中使用compass normalize的方法
2019/05/30 Javascript
axios封装与传参示例详解
2020/10/18 Javascript
详解template标签用法(含vue中的用法总结)
2021/01/12 Vue.js
python获取Linux下文件版本信息、公司名和产品名的方法
2014/10/05 Python
Python爬虫爬验证码实现功能详解
2016/04/14 Python
解决seaborn在pycharm中绘图不出图的问题
2018/05/24 Python
Centos部署django服务nginx+uwsgi的方法
2019/01/02 Python
python读取文件名并改名字的实例
2019/01/07 Python
python超时重新请求解决方案
2019/10/21 Python
python 下划线的不同用法
2020/10/24 Python
如何用python爬取微博热搜数据并保存
2021/02/20 Python
HTML5 FormData 方法介绍以及实现文件上传示例
2017/09/12 HTML / CSS
教师师德教育的自我评价
2013/10/31 职场文书
期末总结的个人自我评价
2013/11/02 职场文书
先进工作者获奖感言
2014/02/08 职场文书
元宵节晚会主持人串词
2014/03/25 职场文书
司法局2014法制宣传日活动总结
2014/11/01 职场文书
个人先进事迹材料范文
2014/12/29 职场文书
运动会新闻稿
2015/07/17 职场文书