吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2454|回复: 12
收起左侧

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

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

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

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

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

s = Student()
s.say_age()

运行结果为:不知道
从上面一个简单地例子来看,子类Student已经继承了父类Person,并且可以自由调用方法。
[Python] 纯文本查看 复制代码
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
从上面代码中可以看出,继承成功后子类一样可以调用父类中的属性,私有属性继承后相当于子类的私有属性,需要使用调用私有属性的方法调用。

免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
woyucheng + 1 + 1 谢谢@Thanks!
sdaza + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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追求语法简介,没有严格意义上的封装和多态
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-3-29 19:06

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表