- A+
1.1 属性property
面试题:
1、 你对面向对象的理解
2、 面向对象的特征是什么
3、 对封装的理解?
封装,类本身就是一个封装,封装了属性和方法。方法也是封装,对一些业务逻辑的封装。私有也是封装,将一些方法和属性私有化,对外提供可访问的接口。
4、 对继承的理解
将共性的内容放在父类中,子类只需要关注自己特有的内容,共性的继承过来就行了。
这样简化开发,符合逻辑习惯,利于扩展。
5、 多态的理解
多态,一个对象在不同的情况下显示不同的形态。在python中因为是弱类型语言,对类型没有限定,所有python中不完全支持多态,但是多态的思想呢,python也是能体现的。
1.1.1 私有属性添加getter和setter方法
classMoney(object):
def__init__(self):
self.__money = 0
defgetMoney(self):
return self.__money
defsetMoney(self, value):
if isinstance(value, int):
self.__money = value
else:
print("error:不是整型数字")
1.1.2 使用property升级getter和setter方法
classMoney(object):
def__init__(self):
self.__money = 0
defgetMoney(self):
return self.__money
defsetMoney(self, value):
if isinstance(value, int):
self.__money = value
else:
print("error:不是整型数字")
money = property(getMoney, setMoney)
运行结果:
In [1]: from get_set import Money
In [2]:
In [2]: a = Money()
In [3]:
In [3]: a.money
Out[3]: 0
In [4]: a.money = 100
In [5]: a.money
Out[5]: 100
In [6]: a.getMoney()
Out[6]: 100
1.1.3 使用property取代getter和setter方法
@property成为属性函数,可以对属性赋值时做必要的检查,并保证代码的清晰短小,主要有2个作用
· 将方法转换为只读
· 重新实现一个属性的设置和读取方法,可做边界判定
classMoney(object):
def__init__(self):
self.__money = 0
@property
defmoney(self):
return self.__money
@money.setter
defmoney(self, value):
if isinstance(value, int):
self.__money = value
else:
print("error:不是整型数字")
运行结果
In [3]: a = Money()
In [4]:
In [4]:
In [4]: a.money
Out[4]: 0
In [5]: a.money = 100
In [6]: a.money
Out[6]: 100