一个类有两个特点:属性、行为
举一个例子,假如这个对象是你女朋友,那么,
属性包括:名字、年龄、身高、生日等
行为包括:买包、吃饭、逛街等。
Python作为面向对象的语言,主要优点是代码的重用性,也就是DRY(Don’t Repeat Yourself)。Python中面向对象遵循3个基本选择:
1、继承(Inheritance):通过既有的类来创建新类,新类继承既有类的属性和方法
2、封装(Encapsulation):对于对象来说,隐藏本类内部的细节
3、多态(Polymorphism):能够处理不同类型的传入数据
类(class)
一个类就是一个对象的蓝图或者模型。它描述了对象的特征。对于一个类我们可以如下定义:
我们通过关键词class来定一个叫做GirlFriend的类。这儿的类是泛指,下面我们会介绍对象。
对象(object)
对象是类的实例化。如下,比如你找了一个新女朋友Lisa:
Lisa这一个对象就是GirlFriend这个类的实例化。你不在仅仅泛泛地谈论女朋友,而是确实找到了一个叫Lisa的女孩子做女朋友。
实例:
输出结果为:
方法
方法是在类里面定义的函数,通常用来定义一个对象的行为。
上述输出结果为:
Lisa的行为包括eating和buying。
继承
通过现有的类创建新的类。这个新创建的类叫做“子类”,原有的类称为“父类”。比如年龄超过20岁的女朋友为可结婚的女朋友,我们称之为“可结婚女友”。这是我们可以通过女朋友的类来定义可结婚女友的类。
上述运行结果:
可以看出,MarriageGF只是GirlFriend的一个特殊的类,只不过是将age限定在类20。我们创建了一个可结婚女友,Lily,她继承了GirlFriend的的属性和方法,比如GirlFriend中的eating方法虽然没有在MarriageGF中定义,但是Lily依旧能够调用该方法,同时,如果父类和子类的方法冲突,如buying,那么Lily的buying方法将会按照子类方法来运行,父类的buying方法会被覆盖。同样地,通过父类定义的对象不能够调用子类的方法。简而言之,对象的方法只会向上一级查询,不会向下一级查询!
封装
在Python中,我们可以通过在私有属性前面加双下划线前缀,来防止从类外部访问私有属性。比如,我们定一个女朋友,其体重只有自己知道,不允许从外部调用体重。
运行结果:
可以看到,通过在双下划线前缀定一个属性(__weight)不能被外部访问,只能够在类内部访问。
多态性
面向对象的编程中,针对不同的数据形式使用同一个接口。
输出结果为:
上面我们定一个两个类,一个是女朋友、一个是男朋友,他们都有共同的方法sex(),但是这两种方法在不同的类中的作用不同。为了实现多态,我们重新定一个了一个新接口spouse_sex(),通过这种方法,我们整合了两个类中的sex()函数。
总结
面向对象编程的三大特点:继承、封装和多态。面向对象的最大优势是:代码变得简单高效;代码可以重用;数据更加安全。
===== THE END =====
参考资料:https://www.programiz.com/python-programming/object-oriented-programming
领取专属 10元无门槛券
私享最新 技术干货