pythonproperty属性,python中property的用法

  pythonproperty属性,python中property的用法

  仅供学习,转载请注明出处。

  什么是房产属性?像实例属性一样使用的特殊属性,可以对应于特定的方法。

  #静下心来创造一个胖老板阶层

  在[24]中:类FatBoss():

  .定义播放(自己):

  .打印(胖老板:静下心来玩斗地主)

  .#定义property属性

  .@属性

  .定义销售(自我):

  .打印(《胖老板:从容卖包芙蓉王》)

  .

  #冷静下来,创建一个实例

  在[25]中:fb=FatBoss()

  #冷静地调用普通的实例方法

  In [26]: fb.play()

  老板:静下心来玩斗地主。

  #冷静调用property属性对应的方法,冷静报错。这是为什么呢?

  In [27]: fb.sell()

  老板:静下心来卖包,芙蓉王。

  -

  类型错误回溯(最近一次调用)

  模块中的ipython-input-27-a42050ff6e4f

  - 1 fb.sell()

  type error:“none type”对象不可调用

  #原来属性的属性对应的方法是写不出来的(),所以用它作为selef.name,只不过它对应的是一个方法。

  #则意味着属性不能从外部实例传入参数。

  In [28]: fb.sell

  老板:静下心来卖包,芙蓉王。

  In [29]: FatBoss.sell

  out[29]:0x7fd 84 f 7d 42 c 8处的属性

  属性的定义和调用应注意以下几点:

  定义时,在实例方法的基础上添加@ property decorator并且只调用一个self参数,不需要括号方法:fb.sell() property属性:fb.sell。

  示例-JD.COM商城的分页

  对于JD.COM商城的电脑主机列表页面,每个请求都无法在页面上显示数据库中的所有内容,但是可以通过分页功能在本地显示。因此,当从数据库中请求数据时,有必要显示对从物品M到物品n的所有数据的指定访问。分页功能包括:

  根据当前页面和用户请求的数据总数计算M和N。为什么需要M和N的数字来根据M和N请求数据库中的数据?首先需要知道mysql等分页查询的SQL:select * from table _ name limit m,n。

  [34]:班里传呼机:

  .def __init__(self,current_page):

  .#用户当前请求的页码

  .self.current_page=当前页面

  .#默认情况下,每页显示10页数据。

  .self.per_items=10

  .#定义property属性并计算起始值m限制m,n

  .@属性

  .def calculate_m(自身):

  .val=(self . current _ page-1)* self . per _ items

  .返回值

  .#定义property属性并计算最终值n limit m,n

  .@属性

  .def calculate_n(自身):

  .val=self . current _ page * self . per _ items

  .返回值

  .

  在[35]中:

  In [35]: p=Pager(1) #传入的当前页码是第一页。

  在[36]: p.calculate_m

  Out[36]: 0

  在[37]: p.calculate_n

  Out[37]: 10

  在[38]中:

  In [38]: p=Pager(10) #传入的当前页码是第10页。

  在[39]: p.calculate_m

  Out[39]: 90

  在[40]: p.calculate_n

  Out[40]: 100

  在[41]:从上面的代码可以看出,只要添加@property作为装饰器,那么就可以直接获得类中的计算方法作为实例变量。

  修饰属性有两种方式,即对方法应用decorator,即在类中用property对象的值定义类属性,对类的实例方法应用@property decorator。

  Python中的类包括经典类和新类,新类的属性比经典类更丰富。(如果该类继承object,则该类是一个新类)

  经典,带@属性装饰

  在[41]中;班法特博斯:

  .@属性

  .定义销售(自我):

  .返回“胖老板:从容卖包芙蓉王”

  在[42]中:fb=FatBoss()

  在[43]:打印(fb.sell)

  老板:静下心来卖包,芙蓉王。

  In [44]:一个有三个@ property decorators的新类。

  在[45]中;类FatBoss:

  .对象类在python3中默认被继承。

  .python2和3执行这个程序的结果是不一样的,因为@xxx.setter @xxx.deleter只有python3才有。

  .

  .@属性

  .定义销售(自我):

  .返回“胖老板:从容卖包芙蓉王”

  .#定义价格的属性price

  .@属性

  .定义价格(自身):

  .打印( @property )

  .#定义属性property price的setter方法

  .@price.setter

  .定义价格(自身,价值):

  .打印( @price.setter )

  .#定义property property price的deleter方法

  .@price.deleter

  .定义价格(自身):

  .打印( @price.deleter )

  .

  在[46]中:fb=FatBoss()

  In [47]: fb.price

  @属性

  In [48]: fb.price=17

  @price.setter

  In [49]: fb.price

  @属性

  在[50]:打印(预算价格)

  @属性

  从上面可以看出,fb.price=17会自动调用@price.setter的方法,这里有一个详细的例子。

  属性设置者和删除者方法——胖子来找胖老板买烟,白送,有优惠。

  有了胖老板的优惠,我再也不怕冷了。

  注意

  classic类中的属性只有一个访问方法,其对应的方法由@property修改。新类中的属性有三个访问方法,并且有三个由@property,@ method name修改的方法。setter和@方法名。删除器。因为新类中有三种访问方法,根据几个属性的访问特点,我们可以把三种方法定义为同一个属性:在[

  .def __init__(self):

  .#一包芙蓉王的原价

  .self.original_price=26

  .#胖子白买的话会打折。

  .自我折扣=0.8

  .#设置属性变量

  .@属性

  .定义价格(自身):

  .#实际价格=原价*折扣

  .new_price=self .原始价格* self.discount

  .返回新价格

  .#设置属性的setter方法

  .@price.setter

  .定义价格(自身,价值):

  .self.original_price=值

  .#设置属性的删除方法

  .@price.deleter

  .定义价格(自身):

  .del self.original _价格

  .

  In [2]: fb=FatBoss()

  In [3]: fb.price

  输出[3]: 20.8

  In [4]: fb.price=17

  In [5]: fb.price

  out[5]:13.60000000000001

  In [6]: del fb.price

  In [7]: fb.price

  -

  AttributeError Traceback(最近一次调用)

  模块中的ipython-input-7-8b8b5efb4572

  - 1英镑的价格

  ipython-input-1-56837 AC 7 ad 5b in price(self)

  9 def价格(自身):

  10 #实际价格=原价*折扣

  11 new _ price=self . original _ price * self . discount

  12返回新价格

  13 #设置属性的setter方法

  attribute error:“fat boss”对象没有属性“original_price”

  In [8]:一个class属性方法,创建一个值为property对象的class属性。

  当使用class属性创建property属性时,经典类和新类之间没有区别。

  在[8]:类FatBoss:

  .def sell_ciggite(self):

  .返回“芙蓉王”

  .#定义属性

  .SELL=property(sell_ciggite)

  .

  在[9]中:fb=FatBoss()

  在[10]:打印(fb。SELL) #从结果来看,和调用@property是一样的。

  王芙蓉

  在[11]中:在[11]中有四个参数:属性方法。

  第一个参数是方法名,它在调用对象时自动触发方法的执行。property===fb.price .第二个参数是方法名,调用对象时自动触发方法的执行。Property=XXX===fb.price=17。第三个参数是方法名,它在调用del对象时自动触发方法的执行。Property==delfb.price .第四个参数是一个字符串,它调用对象。财产。

  那么在这里,上例中的setter和deleter是以SELL=property()的方式实现的。

  在[17]中;类FatBoss:

  .def __init__(self):

  .self.original_price=26

  .自我折扣=0.8

  .定义价格(自身):

  .new_price=self .原始价格* self.discount

  .返回新价格

  .def set_price(自身,值):

  .self.original_price=值

  .def del_price(自身):

  .del self.original _价格

  .#定义property属性

  .price=property (price,set _ price,del _ price,这是价格的属性描述信息)

  .

  在[18]中:fb=FatBoss()

  在[19]: fb。价格

  Out[19]: 20.8

  在[20]: fb。价格=17

  在[21]: fb。价格

  out[21]:13.6000000000001

  在[22]: del fb。价格

  在[23]: fb。价格

  -

  AttributeError Traceback(最近一次调用)

  模块中的ipython-input-23-f1fcd9b37f75

  - 1 fb。价格

  ipython-input-17-DD 23 c 68d 302 b in价格(自带)

  4自我折扣=0.8

  5 def价格(自身):

  -6 new _ price=self . original _ price * self .折扣

  7返回新价格

  8 def set_price(自身,价值):

  attribute error:“fat boss”对象没有属性“original_price”

  在[24]中:从上面的代码中可以看出,使用price=property的代码(price,set _ price,del _ price,这是price的属性描述信息),可以省略三个修饰符@ property @ price . setter @ price . deleter的使用。

  总而言之:

  定义property属性有两种方式,分别是[Decorator]和[Class Attribute],而[Decorator]对于经典类和新类是不同的。通过使用property属性,可以简化调用者获取数据的过程。说了这么多,应用实例是什么?

  如果你不举例子,这就是结果。

  property-应用私有属性来添加getter和setter方法类Money(object):

  def __init__(self):

  自我。__money=0

  def getMoney(self):

  回归自我。_ _钱

  def setMoney(自身,价值):

  if isinstance(value,int):

  自我。_ _金钱=价值

  否则:

  print( error:not a integer number )使用property设置getter和setter方法类Money(object):

  def __init__(self):

  自我。__money=0

  def getMoney(self):

  回归自我。_ _钱

  def setMoney(自身,价值):

  if isinstance(value,int):

  自我。_ _金钱=价值

  否则:

  Print(错误:不是整数)

  #定义一个属性,在设置这个钱的值时调用setMoney,在获取值时调用getMoney。

  金钱=财产(getMoney,setMoney)

  a=钱()

  A.money=100 #调用setMoney方法。

  打印(a.money) #调用getMoney方法

  #100用属性的装饰器替换getter和setter方法

  重新实现了属性的设置和读取方法,可以进行边界判断。

  类货币(对象):

  def __init__(self):

  自我。__money=0

  #用decorator修饰money,那么会自动添加一个叫做money的属性。当钱的值被获得时,修饰的方法将被调用。

  @属性

  延期付款(自己):

  回归自我。_ _钱

  #用decorator修饰money,在设置money的值时调用decorated方法。

  @money.setter

  定义货币(自身,价值):

  if isinstance(value,int):

  自我。_ _金钱=价值

  否则:

  Print(错误:不是整数)

  a=钱()

  a .钱=100

  印刷(货币)

  关注微信微信官方账号,回复【数据】,Python,PHP,JAVA,web,即可获取Python,PHP,JAVA,前端等视频数据。

  来自海洋的渔夫原创作品,

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: