# -*- coding:utf-8 -*-
一
1.@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
一般情况下,设置以上两个函数,来获取和修改私有属性
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