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之通过Python连接数据库
Oct 28 Python
使用url_helper简化Python中Django框架的url配置教程
May 30 Python
python logging日志模块的详解
Oct 29 Python
Python数据可视化编程通过Matplotlib创建散点图代码示例
Dec 09 Python
Python:Scrapy框架中Item Pipeline组件使用详解
Dec 27 Python
python实现电脑自动关机
Jun 20 Python
通过python实现随机交换礼物程序详解
Jul 10 Python
Pycharm连接远程服务器并实现远程调试的实现
Aug 02 Python
在Python3 numpy中mean和average的区别详解
Aug 24 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
Sep 28 Python
python Tornado框架的使用示例
Oct 19 Python
Pytorch 如何加速Dataloader提升数据读取速度
May 28 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函数代码
2010/04/22 PHP
基于PHP的cURL快速入门教程 (小偷采集程序)
2011/06/02 PHP
PHP模块 Memcached功能多于Memcache
2011/06/14 PHP
php中防止恶意刷新页面的代码小结
2012/10/31 PHP
具有时效性的php加密解密函数代码
2013/06/19 PHP
php组合排序简单实现方法
2016/10/15 PHP
PHP封装函数实现生成随机的字符串验证码
2017/01/24 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
jQuery向后台传入json格式数据的方法
2015/02/13 Javascript
jQuery层动画定位滑动效果的方法
2015/04/30 Javascript
JavaScript实现非常简单实用的下拉菜单效果
2015/08/27 Javascript
Bootstrap的图片轮播示例代码
2015/08/31 Javascript
js检测用户输入密码强度
2015/10/22 Javascript
jQuery+json实现的简易Ajax调用实例
2015/12/14 Javascript
JavaScript 数组some()和filter()的用法及区别
2016/05/20 Javascript
AngularJS中一般函数参数传递用法分析
2016/11/22 Javascript
AngularJS 在同一个界面启动多个ng-app应用模块详解
2016/12/20 Javascript
jQuery is not defined 错误原因与解决方法小结
2017/03/19 Javascript
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
微信小程序实现animation动画
2018/01/26 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
2019/01/27 Javascript
vue实现手机号码的校验实例代码(防抖函数的应用场景)
2019/09/05 Javascript
如何阻止小程序遮罩层下方图层滚动
2019/09/05 Javascript
Python字符串格式化
2015/06/15 Python
python 读取视频,处理后,实时计算帧数fps的方法
2018/07/10 Python
Django forms组件的使用教程
2018/10/08 Python
python实现通过队列完成进程间的多任务功能示例
2019/10/28 Python
django在保存图像的同时压缩图像示例代码详解
2020/02/11 Python
Python 开发工具通过 agent 代理使用的方法
2020/09/27 Python
css3与html5实现响应式导航菜单(导航栏)效果分享
2014/02/12 HTML / CSS
分享全球十款超强HTML5开发工具
2014/05/14 HTML / CSS
咖啡店的创业计划书,让你hold不住
2014/01/03 职场文书
小学语文课后反思精选
2014/04/25 职场文书
大学生自我评价200字(4篇)
2014/09/17 职场文书
聊一聊python常用的编程模块
2021/05/14 Python
Python手拉手教你爬取贝壳房源数据的实战教程
2021/05/21 Python