@property装饰器-1

本文详细介绍了Python中@property装饰器的使用方法,包括如何利用它创建getter和setter方法以更优雅地管理类的属性。
# -*- coding:utf-8 -*-

1.@property 负责装饰一个对象函数,让其生成对应的settergetter函数,调用的时候,直接可以使用对象名,函数名这种类似于属性的调用方式来执行函数

class People(object):

    def __init__(self):
        self.__age = 20
        self.name = '张三'

    # def get_age(self):
    #     return self.__age

    def set_age(self, value):
        self.__age = value
一般情况下,设置以上两个函数,来获取和修改私有属性


   2. @property 会将age函数声明为一个getter函数,getter函数一般用来获取值得操作,所以在函数中一般都会返回一个执行结果
   
@property
    def work(self):
        # 返回私有属性的值
        return self.__age

    @property
    def age(self):
        # 返回私有属性的值
        return self.__age

   3.加了装饰器,设置私有属性的属性值

 @age.setter
    def age(self, value):
        # 设置私有属性值
        self.__age = value
        print('*****************')

4.没有装饰器@property 时,对象函数的调用如下:
# p1 = People()
# rs = p1.work()
# print(rs)
5.有装饰器@property 时,对象函数的调用如下:
p1 = People()
rs = p1.work
print(rs)
# rs = p1.get_age()
# print(rs)
print('----------------')
rs = p1.age
print(rs)
# p1.set_age(30)
p1.age = 30
print(p1.age)
6.获取对象的属性值
name = p1.name
print(name)
7.指定age函数,获取__age属性值
age = p1.age
 修改对象的属性值
p1.name = '李四'
 执行一个age函数,把30 作为参数传入
p1.age = 10000000000
print(p1.age)

1.@property装饰的对象函数是一个getter函数,一般用来获取某些数据,不会向函数中传递参数

class Man(object):

     #  @property装饰的对象函数是一个getter函数,一般用来获取某些数据,不会向函数中传递参数
     @property
     def work(self):
         print('执行了@property装饰的对象函数')
         return 123
    2. @work.setter装饰的函数,可以向函数中传递参数,对象.函数名 =函数值,一般用来设置某些数据

    
@work.setter
     def work(self, value):

         # 具体功能代码
         print('传递进来的数据为%s'%value)
m = Man()
# 调用@property的函数,获取work的属性值
m.work
# 调用@work.setter的函数,设置work的属性值
m.work = 123

class Student(object):

    def __init__(self):
        self.__number = 2014

    # 定义一个函数,用来获取私有属性值得函数
    def get_number(self):
        return self.__number

    # 定义一个函数,用来设置私有属性值
    def set_number(self,value):
        # 设置私有属性值
        self.__number = value

    1. @property 装一个对象函数,在这个对象函数中,返回__number的值
     @property会将age函数声明为一个getter函数,getter函数一般用来获取值的操作,所以在函数中一般都会返回一个执行结果
  
 @property
    def number(self):
        # 返回私有属性的值
        return self.__number
    2. @number.setter装饰一个对象函数,用来设置私有属性值
 
  @number.setter
    def number(self, value):
        # 设置私有属性值
        self.__number = value

3. 在类声明的外部,获取私有属性值
s = Student()
number = s.get_number()
print(number)
4.普通函数设置number
s.set_number(2015)
number = s.get_number()
print(number)
5. 通过调用@property装饰number函数获取私有属性值
number = s.number
print(number)
6.通过调用@number.setter装饰的number函数,设置私有属性值
s.number = 2018
print(s.number)


   1. 对象有一个age属性,在给age属性赋值时,只能赋予整数类型的值,如果不是整数,抛出异常

'''

if not isinstance(value, int):判断数据是否是整数类型,如果不是,就触发异常

class Women(object):

    def __init__(self, age):
        if not isinstance(age, int):
            # 触发异常
            raise TypeError('age must be a int value!')
        # # 用来表示当前对象是否成年
        # self.is_ok = False
        self._age = age

   
def set_age(self,value):
       if not isinstance(value, int):
            raise TypeError('age must be a int value!')
        self._age = value

2.加了装饰器,获取age
   
@property
    def age(self):
        return self._age

3.加了装饰器,设置属性  

 @age.setter
    def age(self,value):
        # 判断传递过来的值是否为整数类型,不是整数类型直接抛出异常
        if not isinstance(value, int):
            # 触发异常
            raise TypeError('age must be a int value!')
        self._age = value
        # 判断当前对象的年龄是否
        if self._age >= 18:
            print('你已成年')
        else:
            print('未成年')

4.调用

w = Women(18)
# 相当于 给对象 属性赋值
w.age = 15
print(w.age)

# w.set_age = 'qwer'


完整代码

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

# @property 负责装饰一个对象函数,让其生成对应的setter和getter函数,调用的时候,直接可以使用对象名,函数名这种类似于属性的调用方式来执行函数
class People(object):

    def __init__(self):
        self.__age = 20
        self.name = '张三'

    # def get_age(self):
    #     return self.__age

    def set_age(self, value):
        self.__age = value

    # @property 会将age函数声明为一个getter函数,getter函数一般用来获取值得操作,所以在函数中一般都会返回一个执行结果
    @property
    def work(self):
        # 返回私有属性的值
        return self.__age

    @property
    def age(self):
        # 返回私有属性的值
        return self.__age


    @age.setter
    def age(self, value):
        # 设置私有属性值
        self.__age = value
        print('*****************')


# 没有装饰器@property 时,对象函数的调用如下:
# p1 = People()
# rs = p1.work()
# print(rs)

# 有装饰器@property 时,对象函数的调用如下:
p1 = People()
rs = p1.work
print(rs)


# rs = p1.get_age()
# print(rs)
print('----------------')
rs = p1.age
print(rs)
# p1.set_age(30)
p1.age = 30
print(p1.age)


# 获取对象的属性值
name = p1.name
print(name)
# 指定age函数,获取__age属性值
age = p1.age
# 修改对象的属性值
p1.name = '李四'
# 执行一个age函数,把30 作为参数传入
p1.age = 10000000000
print(p1.age)

class Man(object):

     #  @property装饰的对象函数是一个getter函数,一般用来获取某些数据,不会向函数中传递参数
     @property
     def work(self):
         print('执行了@property装饰的对象函数')
         return 123

     # @work.setter装饰的函数,可以向函数中传递参数,对象.函数名 =函数值,一般用来设置某些数据

     @work.setter
     def work(self, value):

         # 具体功能代码
         print('传递进来的数据为%s'%value)

m = Man()
# 调用@property的函数,获取work的属性值
m.work
# 调用@work.setter的函数,设置work的属性值
m.work = 123




class Student(object):

    def __init__(self):
        self.__number = 2014

    # 定义一个函数,用来获取私有属性值得函数
    def get_number(self):
        return self.__number

    # 定义一个函数,用来设置私有属性值
    def set_number(self,value):
        # 设置私有属性值
        self.__number = value

    # @property 装一个对象函数,在这个对象函数中,返回__number的值
    # @property会将age函数声明为一个getter函数,getter函数一般用来获取值的操作,所以在函数中一般都会返回一个执行结果
    @property
    def number(self):
        # 返回私有属性的值
        return self.__number

    # @number.setter装饰一个对象函数,用来设置私有属性值
    @number.setter
    def number(self, value):
        # 设置私有属性值
        self.__number = value


# 在类声明的外部,获取私有属性值
s = Student()
number = s.get_number()
print(number)

#
s.set_number(2015)
number = s.get_number()
print(number)

# 通过调用@property装饰number函数获取私有属性值
number = s.number
print(number)

# 通过调用@number.setter装饰的number函数,设置私有属性值
s.number = 2018
print(s.number)


'''
    对象有一个age属性,在给age属性赋值时,只能赋予整数类型的值,如果不是整数,抛出异常
'''
class Women(object):

    def __init__(self, age):
        if not isinstance(age, int):
            # 触发异常
            raise TypeError('age must be a int value!')
        # # 用来表示当前对象是否成年
        # self.is_ok = False
        self._age = age

    def set_age(self,value):
        if not isinstance(value, int):
            raise TypeError('age must be a int value!')
        self._age = value

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self,value):
        # 判断传递过来的值是否为整数类型,不是整数类型直接抛出异常
        if not isinstance(value, int):
            # 触发异常
            raise TypeError('age must be a int value!')
        self._age = value
        # 判断当前对象的年龄是否
        if self._age >= 18:
            print('你已成年')
        else:
            print('未成年')



w = Women(18)
# 相当于 给对象 属性赋值
w.age = 15
print(w.age)

# w.set_age = 'qwer'
以上代码执行结果;

20
----------------
20
*****************
30
张三
*****************
10000000000
执行了@property装饰的对象函数
传递进来的数据为123
2014
2015
2015
2018
未成年
15



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值