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查询mysql中文乱码问题
Nov 09 Python
Python实现的远程登录windows系统功能示例
Jun 21 Python
使用Scrapy爬取动态数据
Oct 21 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
Nov 20 Python
对Python使用mfcc的两种方式详解
Jan 09 Python
python使用xlrd模块读取xlsx文件中的ip方法
Jan 11 Python
Python列表切片操作实例总结
Feb 19 Python
Django 迁移、操作数据库的方法
Aug 02 Python
利用Python校准本地时间的方法教程
Oct 31 Python
Python实现井字棋小游戏
Mar 09 Python
python更新数据库中某个字段的数据(方法详解)
Nov 18 Python
python 对图片进行简单的处理
Jun 23 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 cron中的批处理
2008/09/16 PHP
php下关于Cannot use a scalar value as an array的解决办法
2010/08/08 PHP
php实现mysql数据库连接操作及用户管理
2015/11/08 PHP
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
PHP用户验证和标签推荐的简单使用
2016/10/31 PHP
js原生态函数中使用jQuery中的 $(this)无效的解决方法
2011/05/25 Javascript
jQuery+css实现图片滚动效果(附源码)
2013/03/18 Javascript
jquery 倒计时效果实现秒杀思路
2013/09/11 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
Asp.Net alert弹出提示信息的几种方法总结
2014/01/29 Javascript
实例分析js和C#中使用正则表达式匹配a标签
2014/11/26 Javascript
javascript实现左右控制无缝滚动
2014/12/31 Javascript
JavaScript之Vue.js【入门基础】
2016/12/06 Javascript
详解vue-Resource(与后端数据交互)
2017/01/16 Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
2017/01/17 Javascript
详解用函数式编程对JavaScript进行断舍离
2017/09/18 Javascript
vue.js的computed,filter,get,set的用法及区别详解
2018/03/08 Javascript
JS实现的base64加密解密操作示例
2018/04/18 Javascript
微信小程序获取当前时间及星期几的实例代码
2020/09/20 Javascript
[01:01:51]EG vs VG Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
python执行子进程实现进程间通信的方法
2015/06/02 Python
Python实现的微信好友数据分析功能示例
2018/06/21 Python
python使用Plotly绘图工具绘制水平条形图
2020/03/25 Python
Python xlrd模块导入过程及常用操作
2020/06/10 Python
Timberland美国官网:全球领先的户外品牌
2016/08/15 全球购物
C/C++程序员常见面试题二
2015/11/19 面试题
施惠特软件测试面试题以及笔试题
2015/05/13 面试题
成人高等教育毕业生自我鉴定
2013/10/22 职场文书
校园活动策划方案
2014/06/13 职场文书
2014年群众路线教育实践活动整改措施
2014/09/24 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
实习证明格式范文
2015/06/16 职场文书
小学教师暑期培训心得体会
2016/01/09 职场文书
人生一定要学会的三样东西:放下、忘记、珍惜
2019/08/21 职场文书
webpack的移动端适配方案小结
2021/07/25 Javascript
Python 多线程处理任务实例
2021/11/07 Python