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实现可将字符转换成大写的tcp服务器实例
Apr 29 Python
python实现上传下载文件功能
Nov 19 Python
使用python爬虫实现网络股票信息爬取的demo
Jan 05 Python
对numpy数据写入文件的方法讲解
Jul 09 Python
不知道这5种下划线的含义,你就不算真的会Python!
Oct 09 Python
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
Dec 13 Python
Python编程在flask中模拟进行Restful的CRUD操作
Dec 28 Python
python IDLE 背景以及字体大小的修改方法
Jul 12 Python
numpy中的meshgrid函数的使用
Jul 31 Python
Python+AutoIt实现界面工具开发过程详解
Aug 07 Python
Python生成器generator原理及用法解析
Jul 20 Python
Python函数调用追踪实现代码
Nov 27 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
我的论坛源代码(十)
2006/10/09 PHP
php中判断字符串是否全是中文或含有中文的实现代码
2011/09/16 PHP
Mootools 1.2 手风琴(Accordion)教程
2009/09/15 Javascript
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
jQuery插件实现适用于移动端的地址选择器
2016/02/18 Javascript
js贪吃蛇游戏实现思路和源码
2016/04/14 Javascript
下一代Bootstrap的5个特点 超酷炫!
2016/06/17 Javascript
JavaScript实现图片懒加载的方法分析
2018/07/05 Javascript
Vue点击切换颜色的方法
2018/09/13 Javascript
JavaScript中的&quot;=、==、===&quot;区别讲解
2019/01/22 Javascript
D3.js(v3)+react 实现带坐标与比例尺的柱形图 (V3版本)
2019/05/09 Javascript
利用es6 new.target来对模拟抽象类的方法
2019/05/10 Javascript
详解ES6 export default 和 import语句中的解构赋值
2019/05/28 Javascript
Python新手实现2048小游戏
2015/03/31 Python
python subprocess 杀掉全部派生的子进程方法
2017/01/16 Python
python爬虫爬取淘宝商品信息
2018/02/23 Python
python定时关机小脚本
2018/06/20 Python
python计算两个数的百分比方法
2018/06/29 Python
浅谈Pycharm中的Python Console与Terminal
2019/01/17 Python
Django使用Jinja2模板引擎的示例代码
2019/08/09 Python
通过Python编写一个简单登录功能过程解析
2019/09/04 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
2020/07/30 Python
全网最详细的PyCharm+Anaconda的安装过程图解
2021/01/25 Python
深入CSS3 动画效果的总结详解
2013/05/09 HTML / CSS
雅诗兰黛(Estee Lauder)英国官方网站:世界顶级化妆品牌
2016/12/29 全球购物
美国折扣宠物药房:Total Pet Supply
2018/05/27 全球购物
2014庆六一活动方案
2014/03/02 职场文书
会计专业求职信
2014/08/10 职场文书
小学生春游活动方案
2014/08/20 职场文书
党员干部廉政承诺书
2015/04/28 职场文书
学校元旦晚会开场白
2015/05/29 职场文书
《最后一头战象》教学反思
2016/02/16 职场文书
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python
Spring Boot 使用 Spring-Retry 进行重试框架
2022/04/24 Java/Android
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android
Ubuntu Server 安装Tomcat并配置systemctl
2022/04/28 Servers