2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 面向对象网络编程基础 property的使用

面向对象网络编程基础 property的使用

时间:2022-06-03 19:32:21

相关推荐

面向对象网络编程基础  property的使用

#经常用到的方法

class People:

def __init__(self, name, weight, height):

self.__name = name

self.__weight = weight

self.__height = height

@property #是一个内置装饰器,避免用户调用时候忘记加括号

def bmi(self):

return self.__weight / self.__height ** 2

a = People('老王', 85, 1.68)

print(a.bmi)

a.bmi = 25 #不可以赋值,如有需要接着向下看

#了解知道即可的方法

class People:

def __init__(self, name):

self.__name = name

@property #通过此方法可以让用户不必加括号就可以执行里面的函数

def name(self):

return self.__name

@name.setter #通过这个方法可以让用户从外边对封装的私有属性进行修改

def name(self,val):

if not isinstance(val, str):

print('必须是str')

return

self.__name = val

@name.deleter#通过此方法可以让用户从外边对私有属性删除

def name(self):

print('不可以删除')

s = People('老王')

s.name = '王八' #通过上面的一系列操作就可以修改name啦

print(s.name)

del s.name

#property的古老的操作

class Foo:

def __init__(self,val):

self.__NAME=val #将所有的数据属性都隐藏起来

def getname(self):

return self.__NAME #obj.name访问的是self.__NAME(这也是真实值的存放位置)

def setname(self,value):

if not isinstance(value,str): #在设定值之前进行类型检查

raise TypeError('%s must be str' %value)

self.__NAME=value #通过类型检查后,将值value存放到真实的位置self.__NAME

def delname(self):

raise TypeError('Can not delete')

name=property(getname,setname,delname) #不如装饰器的方式清晰

s = Foo(5)

s.setname('6')

s.delname()

print(s.name)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。