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 相关文章推荐
有关wxpython pyqt内存占用问题分析
Jun 09 Python
基python实现多线程网页爬虫
Sep 06 Python
django项目运行因中文而乱码报错的几种情况解决
Nov 07 Python
Python学习pygal绘制线图代码分享
Dec 09 Python
Python进阶之尾递归的用法实例
Jan 31 Python
python list删除元素时要注意的坑点分享
Apr 18 Python
python-docx修改已存在的Word文档的表格的字体格式方法
May 08 Python
python实现监控某个服务 服务崩溃即发送邮件报告
Jun 21 Python
python批量爬取下载抖音视频
Jun 17 Python
Python基于requests实现模拟上传文件
Apr 21 Python
Keras模型转成tensorflow的.pb操作
Jul 06 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
Oct 28 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
合作指挥官:孟斯克
2020/03/16 星际争霸
php 用checkbox一次性删除多条记录的方法
2010/02/23 PHP
php合并js请求的例子
2013/11/01 PHP
thinkphp模板的包含与渲染实例分析
2014/11/26 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
2015/04/15 PHP
Javascript 遍历对象中的子对象
2009/07/03 Javascript
Jquery 组合form元素为json格式,asp.net反序列化
2009/07/09 Javascript
jquery 多行滚动代码(附详细解释)
2010/06/17 Javascript
从零开始学习jQuery (八) 插播:jQuery实施方案
2011/02/23 Javascript
离开当前页面前使用js判断条件提示是否要离开页面
2014/05/02 Javascript
js实现简易的单数字随机抽奖(0-9)
2020/03/19 Javascript
教你如何在Node.js中使用jQuery
2016/08/28 Javascript
Vue.js学习之过滤器详解
2017/01/22 Javascript
Bootstrap3下拉菜单的实现
2017/02/22 Javascript
基于Vue过渡状态实例讲解
2017/09/14 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
基于Datatables跳转到指定页的简单实例
2017/11/09 Javascript
vue.js 实现点击按钮动态添加li的方法
2018/09/07 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
JS使用Chrome浏览器实现调试线上代码
2020/07/23 Javascript
[01:00]一分钟回顾2018DOTA2亚洲邀请赛现场活动
2018/04/07 DOTA
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
Python win32com 操作Exce的l简单方法(必看)
2017/05/25 Python
python SMTP实现发送带附件电子邮件
2018/05/22 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
data:image data url 文件转为Blob上传后端的方法
2019/07/16 HTML / CSS
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
SQL面试题
2013/12/09 面试题
毕业生医学检验求职信
2013/10/16 职场文书
证券期货行业个人的自我评价
2013/12/26 职场文书
计算机网络专业自荐书
2014/06/09 职场文书
工作收入住址证明
2014/10/28 职场文书
员工自我工作评价
2015/03/06 职场文书
Nginx反向代理配置的全过程记录
2021/06/22 Servers
教你部署vue项目到docker
2022/04/05 Vue.js
Python的property属性详细讲解
2022/04/11 Python