- 面向对象三要素
封装:
通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。继承:
继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。多态:
多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。
封装
执行以下代码:
class Person():
def __init__(self):
pass
def set_name(self, name):
self.__name = name
def get_name(self):
return self.__name
def greet(self):
print("Hello, world! I'm {}.".format(self.name))
p = Person()
p.set_name('test')
print(p.name)
执行后报错信息:
print(p.name)
AttributeError: 'Person' object has no attribute 'name'
修改为:
p.get_name()
正确输出
以上代码 将数据__name封装到类中,只能通过set_name和get_name方法操作数据;
继承
继承是一种创建新类的方式,在python中,新建的类可以继承一个父类(单继承)或多个父类(多继承)
代码示例:
class Person():
def __init__(self):
pass
def set_name(self, name):
self.name = name
def get_name(self):
return self.name
def greet(self):
print("Hello, world! I'm {}.".format(self.name))
class Boy(Person):
def run(self):
print('i can run')
def greet(self):
print('i am subclass boy')
b =Boy()
b.name = '张三'
b.greet()
多态
- 多态性的本质在于不同的类中定义有相同的方法名,这样我们就可以不用考虑而统一用一种方式去使用对象,可以通过在父类引入抽象类的概念来硬性限制子类必须有某些方法名:
- 多态已封装和为前提继承
在上面代码基础上新增以下代码:
class Girl(Person):
def say(self):
print('i can good girl')
def greet(self):
print('i am subclass Girl')
Boy,Girl都继承自Person,三个对象都有同样的方法名greet();
Boy和Girl重写了父类的方法,实现不同的输出;