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中获得当前目录和上级目录的实现方法
Oct 12 Python
Python单向链表和双向链表原理与用法实例详解
Aug 31 Python
DRF跨域后端解决之django-cors-headers的使用
Jan 27 Python
Pythony运维入门之Socket网络编程详解
Apr 15 Python
python实现对象列表根据某个属性排序的方法详解
Jun 11 Python
Python识别快递条形码及Tesseract-OCR使用详解
Jul 15 Python
python使用if语句实现一个猜拳游戏详解
Aug 27 Python
Python 中的 import 机制之实现远程导入模块
Oct 29 Python
在 Linux/Mac 下为Python函数添加超时时间的方法
Feb 20 Python
解决Keras自带数据集与预训练model下载太慢问题
Jun 12 Python
浅谈Python基础之列表那些事儿
May 11 Python
移除Selenium中window.navigator.webdriver值
Jun 10 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下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
2011/09/19 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
2014/01/03 PHP
Fedora下安装php Redis扩展笔记
2014/09/03 PHP
php实现删除指定目录下相关文件的方法
2014/10/20 PHP
JQuery 学习笔记 选择器之五
2009/07/23 Javascript
jquery 常用操作整理 基础入门篇
2009/10/14 Javascript
在jquery中处理带有命名空间的XML数据
2011/06/13 Javascript
40款非常棒的jQuery 插件和制作教程(系列一)
2011/10/26 Javascript
15个款优秀的 jQuery 图片特效插件推荐
2011/11/21 Javascript
javascript表单验证和Window详解
2014/12/11 Javascript
jQuery实现购物车数字加减效果
2015/03/14 Javascript
sencha ext js 6 快速入门(必看)
2016/06/01 Javascript
JavaScript Ajax编程 应用篇
2016/07/02 Javascript
微信小程序 Image API实例详解
2016/09/30 Javascript
微信小程序(应用号)开发新闻客户端实例
2016/10/24 Javascript
使用Promise链式调用解决多个异步回调的问题
2017/01/15 Javascript
javascript 日期相减-在线教程(附代码)
2017/08/17 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
Javascript Dom元素获取和添加详解
2019/09/24 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
[46:57]EG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[55:54]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python学生信息管理系统
2018/03/13 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
2019/05/10 Python
python3图片文件批量重命名处理
2019/10/31 Python
使用opencv将视频帧转成图片输出
2019/12/10 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
2020/05/27 Python
Python安装第三方库攻略(pip和Anaconda)
2020/10/15 Python
南京软件公司的.net程序员笔试题
2014/08/31 面试题
是否可以从一个static方法内部发出对非static方法的调用?
2014/08/18 面试题
员工培训心得体会
2013/12/30 职场文书
考生诚信考试承诺书
2014/05/23 职场文书
知识就是力量演讲稿
2014/09/13 职场文书
求职自我推荐信
2015/03/24 职场文书
会议简报格式范文
2015/07/20 职场文书
导游词之安徽九华山
2019/09/18 职场文书