@property-3

# -*- coding:utf-8 -*-
1.对@property-1好@property-2的总结

class People(object):

    def __init__(self, name, age):

        self.name = name
        self.age = age
        # 私有属性
        self.__number = 0

   2.这两个函数的作用,就是为了在类声明的外部,可以访问到私有属性值
    专门定义函数获取私有属性值
   
def num(self):
        # 返回私有属性值
        return self.__number

     专门定义函数设置私有属性值
   
# set 是一个函数名,随便取
    def set(self, value):
        # 给对象的属性赋值
        self.__number = value

    3. 专门定义函数删除私有属性
  
 def delete_attr(self):
        # 删除属性
        del self.__number

    4. 获取私有属性值 number=p1.number,会返回一个结果
   
@property
    def number(self):
        # 返回私有属性值
        return self.__number

    5. 设置私有属性值  p1.number=666
   
@number.setter
    def number(self, value):
        # 设置__number的值
        self.__number = value
    6.删除私有属性 del p1.number 会执行这个函数
   
@number.deleter
    def number(self):
        # 删除属性
        del self.__number
7.普通设置和获取age的函数
   
def set_age(self, value):
        # self 是p1  p1.age=30
        self.age = value

    def get_age(self):

        return self.age
8.加了装饰器的work函数的获取,设置,删除
   
@property
    def work(self):
        print('执行了@property装饰的work函数')
        return 10*10

    @work.setter   #当 对象.work=值  会执行这个函数
    def work(self, value):
        print('执行了@work.setter装饰的work函数')
        print(value)

    @work.deleter  #当  del  对象.work   会执行这个函数
    def work(self):
        print('执行了@work.deleter装饰的work函数')

9.调用执行

p1 = People('张三', 22)
print(p1.name)
p1.name = '李四'
print(p1.name)
setattr(p1, 'name', '王五')
print(p1.name)

10. 对象.函数(参数)
p1.set_age(30)
print(p1.set_age)
print(p1.age)

11. 有@property 的不需要加括号 rs = p1.work,没有的是 rs = p1.work()
p1.work
rs = p1.work
print(rs)
# 执行@work.setter装饰的函数
p1.work = 2000
执行@work.deleter装饰的函数
del p1.work
12 在类声明的外部,无法直接访问私有属性
# p1.__number
number = p1.num()
print(number)
# 在类声明的外部,无法直接访问私有属性值
# p1.__number=1000
p1.set(1000)
number = p1.num()
print(number)
# 在类声明的外部,无法直接访问私有属性值
# del p1.__number
# p1.delete_attr()
13.正常的对象属性赋值
# 对象.属性名=属性值
p1.name = '李四'
# 获取对象的属性值
name = p1.name
# 删除对象的属性值
del p1.name
14. 私有属性升级版
#  会去执行@property装饰的number函数,函数执行完成后返回一个结果
num1 = p1.number
print(num1)
# 会去执行@number.setter装饰的number函数,在函数中设置__number属性的值
p1.number = 666
# 会去执行@number.setter装饰的number函数,函数执行完之后返回一个结果
print(p1.number)
# 会去执行@number.deleter装饰的number函数,在函数中会将__number属性删除
del p1.number

# print(p1.number)

15.完整代码

# -*- coding:utf-8 -*-

# 下午

class People(object):

    def __init__(self, name, age):

        self.name = name
        self.age = age
        # 私有属性
        self.__number = 0

    # 这两个函数的作用,就是为了在类声明的外部,可以访问到私有属性值
    # 专门定义函数获取私有属性值
    def num(self):
        # 返回私有属性值
        return self.__number

    # 专门定义函数设置私有属性值
    # set 是一个函数名,随便取
    def set(self, value):
        # 给对象的属性赋值
        self.__number = value

    # 专门定义函数删除私有属性
    def delete_attr(self):
        # 删除属性
        del self.__number

    # 获取私有属性值 number=p1.number,会返回一个结果
    @property
    def number(self):
        # 返回私有属性值
        return self.__number

    # 设置私有属性值  p1.number=666
    @number.setter
    def number(self, value):
        # 设置__number的值
        self.__number = value

    # 删除私有属性 del p1.number 会执行这个函数
    @number.deleter
    def number(self):
        # 删除属性
        del self.__number



    def set_age(self, value):
        # self 是p1  p1.age=30
        self.age = value

    def get_age(self):

        return self.age

    @property
    def work(self):
        print('执行了@property装饰的work函数')
        return 10*10

    @work.setter   #当 对象.work=值  会执行这个函数
    def work(self, value):
        print('执行了@work.setter装饰的work函数')
        print(value)

    @work.deleter  #当  del  对象.work   会执行这个函数
    def work(self):
        print('执行了@work.deleter装饰的work函数')





p1 = People('张三', 22)
print(p1.name)
p1.name = '李四'
print(p1.name)
setattr(p1, 'name', '王五')
print(p1.name)

# 对象.函数(参数)
p1.set_age(30)
print(p1.set_age)
print(p1.age)

# 有@property 的不需要加括号rs = p1.work,没有的是rs = p1.work()
p1.work
rs = p1.work
print(rs)
# 执行@work.setter装饰的函数
p1.work = 2000

# 执行@work.deleter装饰的函数
del p1.work

# 在类声明的外部,无法直接访问私有属性
# p1.__number
number = p1.num()
print(number)

# 在类声明的外部,无法直接访问私有属性值
# p1.__number=1000
p1.set(1000)
number = p1.num()
print(number)

# 在类声明的外部,无法直接访问私有属性值
# del p1.__number
# p1.delete_attr()


# 正常的对象属性赋值
# 对象.属性名=属性值
p1.name = '李四'
# 获取对象的属性值
name = p1.name
# 删除对象的属性值
del p1.name


# 私有属性升级版
#  会去执行@property装饰的number函数,函数执行完成后返回一个结果
num1 = p1.number
print(num1)
# 会去执行@number.setter装饰的number函数,在函数中设置__number属性的值
p1.number = 666
# 会去执行@number.setter装饰的number函数,函数执行完之后返回一个结果
print(p1.number)
# 会去执行@number.deleter装饰的number函数,在函数中会将__number属性删除
del p1.number
# print(p1.number)

16.执行结果为:


张三
李四
王五
<bound method People.set_age of <__main__.People object at 0x0000000000AC4748>>
30
执行了@property装饰的work函数
执行了@property装饰的work函数
100
执行了@work.setter装饰的work函数
2000
执行了@work.deleter装饰的work函数
0
1000
1000
666



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值