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函数的参数的默认值所引发的问题的原因
Mar 30 Python
举例介绍Python中的25个隐藏特性
Mar 30 Python
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
Mar 12 Python
如何利用python制作时间戳转换工具详解
Sep 12 Python
Anaconda2 5.2.0安装使用图文教程
Sep 19 Python
Puppeteer使用示例详解
Jun 20 Python
PyQt5实现暗黑风格的计时器
Jul 29 Python
命令行运行Python脚本时传入参数的三种方式详解
Oct 11 Python
python实现简单俄罗斯方块
Mar 13 Python
Python项目跨域问题解决方案
Jun 22 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
Aug 27 Python
详解pytorch tensor和ndarray转换相关总结
Sep 03 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生成随机数或者字符串的代码
2008/09/05 PHP
php随机输出名人名言的代码
2012/10/07 PHP
PHP批量上传图片的具体实现方法介绍.
2014/02/26 PHP
php简单分页类实现方法
2015/02/26 PHP
php版微信发红包接口用法示例
2016/09/23 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
JS option location 页面跳转实现代码
2008/12/27 Javascript
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
2010/11/28 Javascript
JS隐藏参数post传值实例
2013/04/18 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
JS实现让访问者自助选择网页文字颜色的方法
2015/02/24 Javascript
在IE8上JS实现combobox支持拼音检索功能
2016/05/23 Javascript
解析预加载显示图片艺术
2016/12/05 Javascript
Vue常用指令V-model用法
2017/03/08 Javascript
vue.js 获取当前自定义属性值
2017/06/01 Javascript
JS Testing Properties 判断属性是否在对象里的方法
2017/10/01 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
2018/02/24 Javascript
使用layer弹窗,制作编辑User信息页面的方法
2019/09/27 Javascript
node.js使用stream模块实现自定义流示例
2020/02/13 Javascript
jQuery中event.target和this的区别详解
2020/08/13 jQuery
[02:19]DOTA2上海特级锦标赛 观赛指南 Spectator Guide
2016/02/04 DOTA
[58:25]VP vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[43:43]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第一场 11.22
2020/11/24 DOTA
深入讲解Python编程中的字符串
2015/10/14 Python
python实现微信小程序自动回复
2018/09/10 Python
python多项式拟合之np.polyfit 和 np.polyld详解
2020/02/18 Python
Python sys模块常用方法解析
2020/02/20 Python
python 对一幅灰度图像进行直方图均衡化
2020/10/27 Python
python对输出的奇数偶数排序实例代码
2020/12/04 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
canvas 橡皮筋式线条绘图应用方法
2019/02/13 HTML / CSS
Linux机考试题
2015/10/16 面试题
《动手做做看》教学反思
2014/04/09 职场文书
中学教师师德承诺书
2014/05/23 职场文书
自查自纠工作总结
2014/10/15 职场文书
MySQL多表查询机制
2022/03/17 MySQL