创建可管理对象属性, 类的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
不允许删除
写入自己的博客中才能记得长久