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 字符串操作实现代码(截取/替换/查找/分割)
Jun 08 Python
详解Django中的权限和组以及消息
Jul 23 Python
python利用paramiko连接远程服务器执行命令的方法
Oct 16 Python
python shell根据ip获取主机名代码示例
Nov 25 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
Apr 10 Python
Python 实现数组相减示例
Dec 27 Python
python多进程使用函数封装实例
May 02 Python
详解Python中import机制
Sep 11 Python
基于Python组装jmx并调用JMeter实现压力测试
Nov 03 Python
python lambda的使用详解
Feb 26 Python
python中print格式化输出的问题
Apr 16 Python
如何用python绘制雷达图
Apr 24 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/12/11 PHP
PHP之预定义接口详解
2015/07/29 PHP
PHP生成条形码大揭秘
2015/09/24 PHP
php提高网站效率的技巧
2015/09/29 PHP
实例详解PHP中html word 互转的方法
2016/01/28 PHP
掌握PHP垃圾回收机制详解
2019/03/13 PHP
jquery实现奇偶行赋值不同css值
2012/02/17 Javascript
用box固定长宽实现图片自动轮播js代码
2014/06/09 Javascript
Vue.js动态添加、删除选题的实例代码
2016/09/30 Javascript
js 数字、字符串、布尔值的转换方法(必看)
2017/04/07 Javascript
vue.js删除动态绑定的radio的指定项
2017/06/02 Javascript
jQuery判断网页是否已经滚动到浏览器底部的实现方法
2017/10/27 jQuery
js Element Traversal规范中的元素遍历方法
2018/04/19 Javascript
Vue中的Props(不可变状态)
2018/09/29 Javascript
微信小程序实现两个页面传值的方法分析
2018/12/11 Javascript
node.js express捕获全局异常的三种方法实例分析
2019/12/27 Javascript
JS数组方法reverse()用法实例分析
2020/01/18 Javascript
TypeScript 运行时类型检查补充工具
2020/09/28 Javascript
JQuery绑定事件四种实现方法解析
2020/12/02 jQuery
python函数装饰器用法实例详解
2015/06/04 Python
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
详解python中字典的循环遍历的两种方式
2017/02/07 Python
Python json模块dumps、loads操作示例
2018/09/06 Python
Python转换时间的图文方法
2019/07/01 Python
Django文件存储 默认存储系统解析
2019/08/02 Python
Django Docker容器化部署之Django-Docker本地部署
2019/10/09 Python
Python continue语句实例用法
2020/02/06 Python
TensorBoard 计算图的可视化实现
2020/02/15 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
2021/03/04 Python
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
获取邓白氏信用报告:Dun & Bradstreet
2019/01/22 全球购物
DeinDesign德国:设计自己的手机壳
2019/12/14 全球购物
一道SQL面试题
2012/12/31 面试题
电厂厂长岗位职责
2014/01/02 职场文书
幼儿园教师获奖感言
2014/03/11 职场文书
2016应届大学生自荐信模板
2016/01/28 职场文书