高级编程技巧 学习笔记
一、创建可管理的对象属性
在面向对象编程中,我们把方法看做对象的接口。直接访问对象的属性可能是不安全的,或设计上不够灵活,但是使用调用方法在形式上不如访问属性简洁。
1.1、之间访问类属性
- 存在问题,当传入的值不是 int 类型时,变量也会发生改变
class A:
def __init__(self, age):
self.age = age
a = A(18)
print(a.age)
a.age = "20"
print(a.age)
1.2、调用类方法修改
- 相对于访问属性,调用方法显得有点麻烦
class A:
def __init__(self, age):
self.age = age
def get_age(self):
return self.age
def set_age(self, age):
if not isinstance(age, int):
raise TypeError("类型错误!")
self.age = age
a.set_age(21)
print(a.age)
1.3、使用装饰器
- 形式上:属性访问,实际上:调用方法
class A:
def __init__(self, age):
self.age = age
@property
def S(self):
return self.age
@S.setter
def S(self, age):
if not isinstance(age, int):
raise TypeError("类型错误!")
self.age = age
a.S = 22
print(a.age)
1.4、使用 property
- 形式上:属性访问,实际上:调用方法
class A:
def __init__(self, age):
self.age = age
def get_age(self):
return self.age
def set_age(self, age):
if not isinstance(age, int):
raise TypeError("类型错误!")
self.age = age
# property 的源码的 __init__(self, fget=None, fset=None, fdel=None, doc=None)
R = property(get_age, set_age)
a.R = 23
print(a.age)