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数组条件过滤filter函数使用示例
Jul 22 Python
安装dbus-python的简要教程
May 05 Python
利用Python批量生成任意尺寸的图片
Aug 29 Python
Django模型序列化返回自然主键值示例代码
Jun 12 Python
python实现翻转棋游戏(othello)
Jul 29 Python
python gdal安装与简单使用
Aug 01 Python
Python编程学习之如何判断3个数的大小
Aug 07 Python
简单了解python调用其他脚本方法实例
Mar 26 Python
Python2手动安装更新pip过程实例解析
Jul 16 Python
浅析Python 字符编码与文件处理
Sep 24 Python
Django框架请求生命周期实现原理
Nov 13 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
php实现网站文件批量压缩下载功能
2015/10/28 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
PHP设计模式之模板方法模式实例浅析
2018/12/20 PHP
childNodes.length与children.length的区别
2009/05/14 Javascript
javascript复制对象使用说明
2011/06/28 Javascript
jQuery表格列宽可拖拽改变且兼容firfox
2014/09/03 Javascript
JavaScript跨域方法汇总
2014/10/16 Javascript
jQuery中val()方法用法实例
2014/12/25 Javascript
javascript内置对象操作详解
2015/02/04 Javascript
常用DOM整理
2015/06/16 Javascript
jquery弹出遮掩层效果【附实例代码】
2016/04/28 Javascript
VUEJS实战之修复错误并且美化时间(2)
2016/06/13 Javascript
javaScript中封装的各种写法示例(推荐)
2017/07/03 Javascript
理解Angular的providers给Http添加默认headers
2017/07/04 Javascript
node实现基于token的身份验证
2018/04/09 Javascript
vue 中引用gojs绘制E-R图的方法示例
2018/08/24 Javascript
Node.js API详解之 zlib模块用法分析
2020/05/19 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
[47:04]EG vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python使用正则表达式分析网页中的图片并进行替换的方法
2015/03/26 Python
Pthon批量处理将pdb文件生成dssp文件
2015/06/21 Python
python输入整条数据分割存入数组的方法
2018/11/13 Python
通过实例解析Python调用json模块
2019/12/11 Python
python 实现分组求和与分组累加求和代码
2020/05/18 Python
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
一家专门经营包包的英国网站:MyBag
2019/09/08 全球购物
美国家居装饰购物网站:Amanda Lindroth
2020/03/25 全球购物
开学典礼感言
2014/02/16 职场文书
新春联欢会主持词
2014/03/24 职场文书
汉语言文学专业自荐信
2014/06/11 职场文书
工作失误检讨书(经典集锦版)
2014/10/17 职场文书
新员工试用期自我评价
2015/03/10 职场文书
Java面试题冲刺第十七天--基础篇3
2021/08/07 面试题
电频谱管理的原则是什么
2022/02/18 无线电
Win11 引入 Windows 365 云操作系统,适应疫情期间混合办公模式:启动时直接登录、模
2022/04/06 数码科技
Win11 PC上的Outlook搜索错误怎么办?
2022/07/15 数码科技