创建可管理对象属性, 类的property
from math import pi
class Circle(object):
def __init__(self,radius):
self.radius = radius
def getRadius(self):
return self.radius
def setRadius(self, value):
if not isinstance(value, (int, float)): #自定义类型 此处可以一个类型,或者由元组包含多个类型, 如果不满足条件,raise ValueError错误
raise ValueError('wrong type.')
self.radius = float(value)
def getarea(self):
return self.radius * 2 * pi
c= Circle(3.2)
c.setRadius("abc")
print(c.setRadius)
property用法
from math import pi
class Circle(object):
def __init__(self,radius):
self.radius = radius
def getRadius(self):
return self.radius
def setRadius(self, value):
if not isinstance(value, (int, float)):
raise ValueError('wrong type.')
self.radius = float(value)
def getArea(self):
return self.radius ** 2 * pi
R = property(getRadius, setRadius)
c = Circle(3.2)
print(c.R)
#c.R= 'abc'
#print(c.R)
c.R = 34
print('nihasdf',c.R)
特性(property)
什么是特性property
property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值
例一:BMI指数(bmi是计算而来的,但很明显它听起来像是一个属性而非方法,如果我们将其做成一个属性,更便于理解)
成人的BMI数值:过轻:低于18.5 正常:18.5-23.9 过重:24-27 肥胖:28-32 非常肥胖, 高于32
体质指数(BMI)=体重(kg)÷身高^2(m) EX:70kg÷(1.75×1.75)=22.86
class People:
def __init__(self,name,weight,height):
self.name = name
self.weight = weight
self.height = height
@property
def bmi(self):
print('=====>>')
return self.weight / (self.height ** 2)
p = People('egon',50,1.65)
p.bmi1 = p.weight / (p.height ** 2)
print('0001',p.bmi1)
print(p.bmi()) # 报错 TypeError: 'float' object is not callable
p.height = 1.85
print(p.bmi)
# p.bmi = 25 #报错 AttributeError: can't set attribute
class People:
def __init__(self,name):
self.__name = name
@property
def name(self):
print('getter')
return self.__name
@name.setter # 修改
def name(self,val):
print('setter',val)
if not isinstance(val,str):
print('名字必须是字符串类型')
return
self.__name = val
@name.deleter # 删除
def name(self):
print('deleter')
print('不允许删除')
p = People('egon')
print(p.name)
p.name = 'alex'
print(p.name)
p.name =1223
print(p.name)
del p.name
输出:
getter
egon
setter alex
getter
alex
setter 1223
名字必须是字符串类型
getter
alex
deleter
不允许删除
写入自己的博客中才能记得长久
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!