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使用post提交数据到远程url的方法
Apr 29 Python
python数据结构之图深度优先和广度优先实例详解
Jul 08 Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
Jun 03 Python
使用Python的Scrapy框架十分钟爬取美女图
Dec 26 Python
Python中的 enum 模块源码详析
Jan 09 Python
Python稀疏矩阵及参数保存代码实现
Apr 18 Python
pycharm实现print输出保存到txt文件
Jun 01 Python
如何真正的了解python装饰器
Aug 14 Python
python利用opencv保存、播放视频
Nov 02 Python
Python使用UDP实现720p视频传输的操作
Apr 24 Python
解决Pytorch dataloader时报错每个tensor维度不一样的问题
May 28 Python
Python图片验证码降噪和8邻域降噪
Aug 30 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 面试碰到过的问题 在此做下记录
2011/06/09 PHP
ThinkPHP实例化模型的四种方法概述
2014/08/22 PHP
Laravel框架之解决前端显示图片问题
2019/10/24 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
2020/08/17 PHP
&amp;lt;script defer&amp;gt; defer 是什么意思
2009/05/10 Javascript
jQuery Ajax提交表单查询获得数据实例代码
2012/09/19 Javascript
javascript常见用法总结
2014/05/22 Javascript
JavaScript获得页面base标签中url的方法
2015/04/03 Javascript
简单谈谈node.js 版本控制 nvm和 n
2015/10/15 Javascript
两种方法解决javascript url post 特殊字符转义 + &amp; #
2016/04/13 Javascript
js实现省份下拉菜单效果
2017/02/15 Javascript
浅谈Vue.js
2017/03/02 Javascript
karma+webpack搭建vue单元测试环境的方法示例
2018/05/24 Javascript
node.js自动上传ftp的脚本分享
2018/06/16 Javascript
JavaScript实现封闭区域布尔运算的示例代码
2018/06/25 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
微信小程序scroll-view横向滑动嵌套for循环的示例代码
2018/09/20 Javascript
laydate如何根据开始时间或者结束时间限制范围
2018/11/15 Javascript
AngularJS实现的自定义过滤器简单示例
2019/02/02 Javascript
微信小程序开发注意指南和优化实践(小结)
2019/06/21 Javascript
基于PHP pthreads实现多线程代码实例
2020/06/24 Javascript
python基础教程之字典操作详解
2014/03/25 Python
django允许外部访问的实例讲解
2018/05/14 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
2018/07/09 Python
对python实现二维函数高次拟合的示例详解
2018/12/29 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
Python使用GitPython操作Git版本库的方法
2020/02/29 Python
python用opencv 图像傅里叶变换
2021/01/04 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的代码
2020/11/30 HTML / CSS
美国帽子俱乐部商店:Hat Club
2019/07/05 全球购物
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
无工作经验者个人求职信范文
2013/12/22 职场文书
优秀员工表扬信
2014/01/17 职场文书
幼儿园端午节活动方案
2014/08/25 职场文书
幼儿教师师德培训心得体会
2016/01/09 职场文书
详解JavaScript的计时器和按钮效果设置
2022/02/18 Javascript