cccyyys 发表于 2021-6-27 22:45

【笔记】面向对象的三大特征(封装、继承、多态)、继承详解

面向对象的三大特征(封装、继承、多态)
封装:隐藏对象的属性和实现细节,只对外提供必要的方法,相当于将“细节封装起来”,只对外暴露“相关的调用方法”。封装可以通过“私有属性、私有方法”的方式,实现封装。
继承:继承可以让子类具有父类的特性,提高了代码的复用性。继承从设计上是一个增量进化,原有父类设计不变的情况下,可以增加新的功能,或者改进已有的算法。
多态:指同一个方法调用由于对象的不同会产生不同的行为。

继承
继承是面向对象程序设计的重要特征,也是实现“代码复用”的重要手段。如果一个新类继承自一个设计好的类,就直接具备了已有类的特征,会大大降低工作难度。已有的类,我们称为“父类或者基类”,新的类,我们称为“子类或者派生类”。
语法格式
Python支持多重继承,一个子类可以继承多个父类。继承的语法格式如下:
class 子类类名(父类1[,父类2,...])
   类体
如果在类定义中没有指定父类,默认父类是object类,也就是说,object是所有类的父类,里面定义了一些所有类共有的默认实现,如:__new__()。
定义子类时,必须在其构造函数中调用父类的构造函数。调用格式如下:
父类名.__init__(self,参数列表)
class Person:

    def say_age(self):
      print('不知道')

class Student(Person):#子类中为空
    pass

s = Student()
s.say_age()
运行结果为:不知道
从上面一个简单地例子来看,子类Student已经继承了父类Person,并且可以自由调用方法。
class Person:
    def __init__(self,name,age):
      self.name = name
      self.__age = age#私有属性
    def say_age(self):
      print('不知道')

class Student(Person):
    def __init__(self,name,age,score):
      Person.__init__(self,name,age)#引用中形参是子类中的形参,不是父类中的。而且必须显式的调用,不然解释器不会调用
      self.score = score

s = Student('cys',18,100)
s.say_age()
print(s.name)
print(s._Person__age)
运行结果为:不知道
cys
18
从上面代码中可以看出,继承成功后子类一样可以调用父类中的属性,私有属性继承后相当于子类的私有属性,需要使用调用私有属性的方法调用。

374163073 发表于 2021-6-27 23:43

封装: 将类中的 属性 改为私有(private修饰)的 并提供相应的get set方法. 可以在这些方法中写上判断逻辑, 这外界就不可以随意的对属性进行设置或获取
继承:子类继承父类以后,可是使用父类中所有的公共(public修饰)的方法. 通过new 子类 就可以调用父类的方法,但是new 父类不可以使用子类的方法.
多态: 父类可以接收子类向上转型自动父类也可以赋值给子类 向下转型(强转).    当你定义一个通用的方法,但方法的形参目前还不确定是什么类型的,可以定义Object (是基类,所有类的父类).
使用多态,父类只能调用子类重写的方法和父类本身的方法, 无法调用子类特有的方法.但是子类可以调用自己的方法,也可以调用父类的,优先调用自己的,当自己没有该方法时,调用父类的.

仅个人理解,有不对的地方,还请各位大佬指证,我们共同进步,共同学习

cccyyys 发表于 2021-6-29 18:01

374163073 发表于 2021-6-27 23:43
封装: 将类中的 属性 改为私有(private修饰)的 并提供相应的get set方法. 可以在这些方法中写上判断逻辑,...

谢谢大佬指教,学习了

ty1314 发表于 2021-6-27 23:13

面向头疼😩

52jcool 发表于 2021-6-27 23:35

收藏,学习,谢谢

374163073 发表于 2021-6-27 23:44

ty1314 发表于 2021-6-27 23:13
面向头疼😩

面向对象要多理解,用的多了就会了

侃遍天下无二人 发表于 2021-6-27 23:58

别用Python写,c++或Java都不错,Python的面向对象做的一点都不好

tbloy 发表于 2021-6-28 00:03

一起学习进步下,支持。

ningmengzhiji 发表于 2021-6-28 13:49

一起学习python

xiajin 发表于 2021-6-28 22:30

Java在这块很全面

cccyyys 发表于 2021-6-29 09:20

xiajin 发表于 2021-6-28 22:30
Java在这块很全面

嗯,听讲课的老师说Python追求语法简介,没有严格意义上的封装和多态
页: [1] 2
查看完整版本: 【笔记】面向对象的三大特征(封装、继承、多态)、继承详解