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根据经纬度计算距离示例
Feb 16 Python
Python 闭包的使用方法
Sep 07 Python
详解python中的 is 操作符
Dec 26 Python
python实现微信自动回复功能
Apr 11 Python
redis之django-redis的简单缓存使用
Jun 07 Python
Python使用logging模块实现打印log到指定文件的方法
Sep 05 Python
Python os.rename() 重命名目录和文件的示例
Oct 25 Python
浅谈Python 列表字典赋值的陷阱
Jan 20 Python
Django 实现外键去除自动添加的后缀‘_id’
Nov 15 Python
Django models filter筛选条件详解
Mar 16 Python
浅谈Python 命令行参数argparse写入图片路径操作
Jul 12 Python
python3代码输出嵌套式对象实例详解
Dec 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输入流php://input使用浅析
2014/09/02 PHP
laravel 4安装及入门图文教程
2014/10/29 PHP
PHP符合PSR编程规范的实例分享
2016/12/21 PHP
PHP count()函数讲解
2019/02/03 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
2019/05/06 PHP
TopList标签和JavaScript结合两例
2007/08/12 Javascript
jquery 学习之二 属性相关
2010/11/23 Javascript
JavaScript XML和string相互转化实现代码
2011/07/04 Javascript
input禁止键盘及中文输入,但可以点击
2014/02/13 Javascript
jQuery选择器基础入门教程
2016/05/10 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
2016/09/21 Javascript
Javascript blur与click冲突解决办法
2017/01/09 Javascript
详解JavaScript 中getElementsByName在IE中的注意事项
2017/02/21 Javascript
js遍历json对象所有key及根据动态key获取值的方法(必看)
2017/03/09 Javascript
解决Jquery下拉框数据动态获取的问题
2018/01/25 jQuery
VUE项目初建和常见问题总结
2019/09/12 Javascript
Jquery滑动门/tab切换实现方法完整示例
2020/06/05 jQuery
python基础教程之类class定义使用方法
2014/02/20 Python
教大家使用Python SqlAlchemy
2016/02/12 Python
使用Python脚本和ADB命令实现卸载App
2017/02/10 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
python防止随意修改类属性的实现方法
2019/08/21 Python
python如何保存文本文件
2020/06/07 Python
python的help函数如何使用
2020/06/11 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
Django配置跨域并开发测试接口
2020/11/04 Python
Sneaker Studio法国:购买运动鞋
2018/06/08 全球购物
总监职责范文
2013/11/09 职场文书
视光学毕业生自荐书范文
2014/02/13 职场文书
买卖车协议书
2014/04/21 职场文书
个人工作表现评语
2014/04/30 职场文书
资源环境与城乡规划管理专业自荐书
2014/09/26 职场文书
2015年度党风廉政建设工作情况汇报
2015/01/02 职场文书
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
2021/04/27 Python
Python3 类型标注支持操作
2021/06/02 Python
python 中的jieba分词库
2021/11/23 Python