Python面向对象之静态属性、类方法与静态方法分析
作者:我是马克思小清新 发布时间:2021-03-28 15:14:22
标签:Python,面向对象,静态属性,类方法,静态方法
本文实例讲述了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\jb51PyDemo\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程序设计有所帮助。
来源:https://blog.csdn.net/qq_33531400/article/details/79879165
0
投稿
猜你喜欢
- Django保证表单的正确显示需要添加CSRF(防止网站跨站请求伪造而默认开启的一种保护方式),在<form></form
- 锟拷码和口字码说到乱码问题就不得不提到锟斤拷,这算是非常常见的一种乱码形式,那么它到底是经过何种错误操作产生的呢?下面我们一步步探究。看一个
- 有时我们需要较为实时的查看服务器上的网卡流量,这里我写了两个小脚本,一个用shell(先写的,一次只能查看一个网卡),另一个用Python(
- Python程序的注释感觉很不合群,对于习惯了使用/**/多行注释的人来说,到Python中只能使用#号进行单行注释很痛苦。# 这里是单行注
- [前言] 我们经常会遇到多重查询问题,而长长的SQL语句往往让人丈二和尚摸不着头脑。特别是客户端部分填入
- ObjectUtil组件其实就是单例模式的最好范例,声明调用各个组件的时候,用ObjectUtil调用,可以有效的防止调用过多的类而导致错误
- 查看python搜索包的路径的实现方法:python搜索包的路径存储在sys.path下查看方法:import syssys.path临时添
- 本文实例为大家分享了Python实现打砖块游戏的具体代码,供大家参考,具体内容如下#导入模块import pygamefrom pygame
- 对于JavaScript对象的操作基本上都会调用底层的对象内部方法,我们可以看出在ES6标准中定了14种内部方法.双 [[]] 代表内部方法
- 其实网上已经有很多这样的类了,不过出于练手的目的还是自己仿照着写了一个。下面的代码放在一个名为UploadFile.class.php文件内
- 这个问题困扰了我很长很长的时间,在跨域获取数据的时候就要用到服务器端的对象,以前一直用的是Msxml.XMLHTTP。但是问题太多了,特别严
- 选择一个合适的编辑器,比如notepad++、VS、eclipse、sublime text等,选中要集体缩进的代码块,按Tab:集体缩进(
- 在网上搜过发现关于keras下的模型融合框架其实很简单,奈何网上说了一大堆,这个东西官方文档上就有,自己写了个demo:# Function
- 在WEB2.0这个词未出现之前,是没有所谓的WEB1.0之说的,那时候的互联网也是没有时代之分的,能上的网站不多,值得上的网站更不多,很多的
- 我们现在回到函数上。记得我们用 SUM 这个指令来算出所有的 Sales (营业额)吧!如果我们的需求变成是要算出每一间店 (store_n
- 注意,在改变数值之前锁定应用,确保一段时间里只有一个客户执行该语句。<SCRIPT LANGUAGE="VBScr
- 一、os函数目录1 os.access(path, mode) 检验权限模式2 os.chdir(path) 改变当前工
- 这篇文章主要介绍了JavaScript监听触摸事件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- 有时在处理不规则数据时需要提取文本包含的时间日期。dateutil.parser模块可以统一日期字符串格式。datefinder模块可以在字
- 什么是状态机?关于状态机的一个极度确切的描述是它是一个有向图形,由一组节点和一组相应的转移函数组成。状态机通过响应一系列事件而“运行”。每个