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第三方库xlrd/xlwt的安装与读写Excel表格
Jan 21 Python
[原创]pip和pygal的安装实例教程
Dec 07 Python
Python设计模式之观察者模式简单示例
Jan 10 Python
Python程序运行原理图文解析
Feb 10 Python
Python实现的基于优先等级分配糖果问题算法示例
Apr 25 Python
从列表或字典创建Pandas的DataFrame对象的方法
Jul 06 Python
Django基础知识 web框架的本质详解
Jul 18 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
Aug 27 Python
python 扩展print打印文件路径和当前时间信息的实例代码
Oct 11 Python
PyCharm永久激活方式(推荐)
Sep 22 Python
解决python虚拟环境切换无效的问题
Apr 30 Python
python 使用pandas读取csv文件的方法
Dec 24 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格式化金额函数分享
2015/02/02 PHP
php简单计算页面加载时间的方法
2015/06/19 PHP
让你的PHP7更快之Hugepage用法分析
2016/05/31 PHP
PHP使用Redis实现防止大并发下二次写入的方法
2017/10/09 PHP
Javascript 判断 object 的特定类转载
2007/02/01 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
jquery与js实现全选功能的区别
2017/06/11 jQuery
React-Native之定时器Timer的实现代码
2017/10/04 Javascript
javascript、php关键字搜索函数的使用方法
2018/05/29 Javascript
Spring boot 和Vue开发中CORS跨域问题解决
2018/09/05 Javascript
微信小程序实现文字无限轮播效果
2018/12/28 Javascript
layui插件表单验证提交触发提交的例子
2019/09/09 Javascript
Vue图片浏览组件v-viewer用法分析【支持旋转、缩放、翻转等操作】
2019/11/04 Javascript
jQuery HTML设置内容和属性操作实例分析
2020/05/20 jQuery
[40:01]OG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Selenium定位元素操作示例
2018/08/10 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
2019/05/06 Python
pyqt5 从本地选择图片 并显示在label上的实例
2019/06/13 Python
Python threading的使用方法解析
2019/08/28 Python
使用python实现男神女神颜值打分系统(推荐)
2019/10/31 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
Python timer定时器两种常用方法解析
2020/01/20 Python
python批量修改xml属性的实现方式
2020/03/05 Python
Django User 模块之 AbstractUser 扩展详解
2020/03/11 Python
Python使用pyenv实现多环境管理
2021/02/05 Python
德国网上超市:myTime.de
2019/08/26 全球购物
LINUX下线程,GDI类的解释
2016/12/14 面试题
毕业实习个人鉴定范文
2013/12/10 职场文书
对孩子的寄语
2014/04/09 职场文书
党的群众路线教育实践活动对照检查材料思想汇报
2014/09/19 职场文书
2014年机关党委工作总结
2014/12/11 职场文书
唐山大地震观后感
2015/06/05 职场文书
宝宝满月祝酒词
2015/08/10 职场文书
pygame面向对象的飞行小鸟实现(Flappy bird)
2021/04/01 Python
Spring boot应用启动后首次访问很慢的解决方案
2021/06/23 Java/Android