python3 property属性

学习链接::https://www.cnblogs.com/happyyangyanghappy/p/10917139.html

一、property的定义和调用

  1、定义时,在实例方法上方加上@property装饰器;并且只有一个self参数(有其他参数会报错,亲自实践);

  2、调用时,无需括号(类似于调用属性)。

__author__ = 'Administrator'
class Info():
    @property
    def height(self):
        return "100斤"

obj=Info()
het=obj.height
print(het)



###########
100斤
View Code

 二、定义property属性的两种方式

  1装饰器

    装饰器:

      新式类中的属性有三种访问方式,并分别对应了三个被@property、@方法名.setter、@方法名.deleter修饰的方法

      由于新式类中具有三种访问方式,我们可以根据它们几个属性的访问特点,分别将三个方法定义为对同一个属性:获取、修改、删除

__author__ = 'Administrator'


# class Info():
#     @property
#     def height(self):
#         return "100斤"
#
# obj=Info()
# het=obj.height
# print(het)


class Bank(object):
    def __init__(self):
       self.ben_jin=10000
       self.li_xi=0.1

    @property
    def total(self):
        new_benjin_lixi=self.ben_jin+self.ben_jin*self.li_xi
        return new_benjin_lixi

    @total.setter
    def total(self,benjin):
        self.ben_jin=benjin

    @total.deleter
    def total(self):
        del self.ben_jin


bank=Bank()
bank.total
bank.total=100000
print(bank.total)
del bank.total



##########################
110000.0
View Code

   2.类属性:在类中定义值为property对象的类属性

    【转自他人】

      property方法中有个四个参数

          第一个参数是方法名,调用 对象.属性 时自动触发执行方法;

          第二个参数是方法名,调用 对象.属性 = XXX 时自动触发执行方法;

          第三个参数是方法名,调用 del 对象.属性 时自动触发执行方法;

          第四个参数是字符串,调用 对象.属性.__doc__ ,此参数是该属性的描述信息。

__author__ = 'Administrator'


# class Info():
#     @property
#     def height(self):
#         return "100斤"
#
# obj=Info()
# het=obj.height
# print(het)


# class Bank(object):
#     def __init__(self):
#        self.ben_jin=10000
#        self.li_xi=0.1
#
#     @property
#     def total(self):
#         new_benjin_lixi=self.ben_jin+self.ben_jin*self.li_xi
#         return new_benjin_lixi
#
#     @total.setter
#     def total(self,benjin):
#         self.ben_jin=benjin
#
#     @total.deleter
#     def total(self):
#         del self.ben_jin
#
#
# bank=Bank()
# bank.total
# bank.total=100000
# print(bank.total)
# del bank.total



class Bank(object):
    def __init__(self):
       self.ben_jin=10000
       self.li_xi=0.1


    def get_total(self):
        new_benjin_lixi=self.ben_jin+self.ben_jin*self.li_xi
        return new_benjin_lixi


    def set_total(self,benjin):
        self.ben_jin=benjin


    def del_total(self):
        del self.ben_jin

    TOTAL=property(get_total,set_total,del_total,"银行利息,模仿别人的代码")
bank=Bank()
bank.TOTAL
bank.TOTAL=100000
print(bank.TOTAL)
description=Bank.TOTAL.__doc__
print("描述信息:",description)
del bank.TOTAL



#################

110000.0
描述信息: 银行利息,模仿别人的代码
View Code

 

class Te():
    def __init__(self):
        self.__num=100


    def getNum(self):
        return self.__num

    def setNum(self,newNum):
        self.__num=newNum

    num=property(getNum,setNum)

t=Te()
print("===========",t.getNum())
t.num=200#相当于调用了t.setNum()
print("相当于调用了t.getNum()",t.num)
t.setNum(250)
print("===========",t.getNum())

#注意点:
# t.unm 到底是调用了getNum()还是getNum(),要根据实际的场景来判断
# 1.如果是给t.num赋值,那么就一定是调用了setNum()
# 2.如果是获取t.num就一定是调用getNum()
# property的作用:相当于把方法进行了封装,开发者在对属性设置数据的时候更方便



#################
=========== 100
相当于调用了t.getNum() 200
=========== 250
View Code

 

 

 

posted @ 2019-11-02 09:27  小猪猪猪  阅读(114)  评论(0)    收藏  举报