python 面向对象编程
Python 面向对象编程的三大特征:封装,继承,多态
封装:通过内部把数据封装,在外部就可直接通过方法调用而无需知道逻辑
继承:类可以继承其父类的所有属性和方法
多态:不同类可以有相同的方法名
(1)
python 中的公有与私有
python默认数据类型都是公有,可通过在__属性名来声明私有,一旦声明私有后,在解释器中的属性名就不再是__属性名,而是_类__属性名
要访问或修改私有属性最好通过在类内部定义方法来访问或修改
class Student(object):
def __init__(self, name, score):
self.__name = name
self.__score = score
def print_score(self):
print('%s: %s' % (self.__name, self.__score))
a=Student('aa',60)
a.__name='bb'
a.print_score()
aa: 60
a.__name
Out[6]: 'bb'
a.__doc__
print(a.__dict__)
{'_Student__name': 'aa', '_Student__score': 60, '__name': 'bb'}
class Student(object):
def __init__(self, name, gender):
self.name = name
self.__gender = gender
def get_gender(self):
return self.__gender
def set_gender(self,value):
self.__gender=value
bart = Student('Bart', 'male')
if bart.get_gender() != 'male':
print('测试失败!')
else:
bart.set_gender('female')
if bart.get_gender() != 'female':
print('测试失败!')
else:
print('测试成功!')
测试成功!
(1)
多态:著名的开闭原则:开:对扩展开放,可扩展子类
闭:对外部函数修改闭合,无需修改即可实现
(2)
对于静态语言(例如Java)来说,如果需要传入Animal类型,则传入的对象必须是Animal类型或者它的子类,否则,将无法调用run()方法。
对于Python这样的动态语言来说,则不一定需要传入Animal类型。我们只需要保证传入的对象有一个run()方法就可以了: