python之静态属性、类方法、静态方法
2024-08-31 10:48:46
静态属性、类方法、静态方法
1. 静态属性:在函数前加@property,将函数逻辑”封装“成数据属性,外部直接调用函数名,如同调用属性一样。这个函数是可以调用类和实例的属性的,
静态属性的作用是把类的方法隐藏起来(可以把背后的逻辑隐藏起来),让用户感觉是在调用属性,而不是方法;
class Room:
res = "alex"
def __init__(self,name,owner,width,length,heigh):
self.name = name
self.owner = owner
self.width = width
self.length = length
self.heigh = heigh
@property #即可调用实例属性也可调用类属性
def cal_area(self):
print(p1.width * p1.length,Room.res)
p1 = Room("四合院","alex",10,10,20)
p1.cal_area
#print(Room.__dict__)#'cal_area': <property object at 0x00000219606DD4F8>
2. 类方法:在类的方法前添加@classmethod,不需要实例化,直接调用类的该方法,可以访问类的数据属性,但是不可以访问对象的数据属性。
@classmethod类方法是通过类里面的函数调用类本身的属性(不跟实例捆绑只和类捆绑,不用实例化)
类方法的定义只是为了类去调用
class Room:
res = "alex"
def __init__(self,name,owner,width,length,heigh):
self.name = name
self.owner = owner
self.width = width
self.length = length
self.heigh = heigh
@classmethod #类方法只能调用类属性,不能调用实例属性
def cal_area(cls):
print(Room.res) #调用类的数据属性
#p1 = Room("四合院","alex",10,10,20) #不需要实例化
Room.cal_area()
3. 静态方法:在类的方法前加@staticmethod,该方法只是名义上的归属类管理,实例和类的属性均不可以访问,仅仅是类的工具包。
可以理解为静态方法只是借用类的大树下的一个独立函数
class Room:
res = "alex"
def __init__(self,name,owner,width,length,heigh):
self.name = name
self.owner = owner
self.width = width
self.length = length
self.heigh = heigh
@staticmethod #类属性和实例属性都不可以调用
def cal_area(x,y):
print(x,y,)
p1 = Room("四合院","alex",10,10,20) #不需要实例化
Room.cal_area(1,2)
p1.cal_area(1,2)
最新文章
- climits
- CSS文档流
- Ruby界面开发--wxRuby库TextCtrl相关问题
- 真实经纬度(gps)转成百度坐标的js方法
- java反射机制(笔记)
- EasyUI - DataGrid 组建 - [ 组件加载和分页 ]
- 这可能是新手最容易入门的JVM讲解(不过是一场恋爱)
- Android-第三天
- php面试上机题(2018-3-3)
- arcis api for js 值 3.17 本地部署
- JS学习笔记Day9
- sql语句出错:Column count doesn&#39;t match value count at row 1
- HDU5293(SummerTrainingDay13-B Tree DP + 树状数组 + dfs序)
- C# 获取文件名及扩展名【转】
- 剑指offer四十三之左旋转字符串
- Genymotion模拟器安装问题及解决(启动失败,模拟器不能联网)
- MPI Maelstrom---poj1502(最短路模板)
- 跨版本mysqldump恢复报错Errno1449
- 10046 trace详解(2)--tkprof
- Python 下载图片的几种方法
热门文章
- 批量修改Linux系统密码
- PHP开发实战权威指南-读书总结
- 2015 Multi-University Training Contest 10 hdu 5412 CRB and Queries
- windows FTP自动下载脚本
- ExtJs之Ext.XTemplate:数组填充,访问父对象
- BA--空调系统一次泵和二次泵区别
- Android慎用layout嵌套, 尽量控制在5层下面java.lang.StackOverflowError
- 【算法拾遗(java描写叙述)】--- 选择排序(直接选择排序、堆排序)
- hadoop分布式架构和设计
- Linux 查找一个函数在哪调用