面向对象编程-继承1.继承介绍以及单继承 2.继承示例3.多继承4.重写父类方法与调用父类方法5.类属性和实例属性6.静态方法和类方法

1.继承介绍以及单继承

将共性的内容放在父类中,子类只需要关注自己特有的内容

继承的概念:在现实生活中,继承一般指的是子女继承父辈的财产,在程序中,继承描述的是事物之间的所属关系,例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物;同理,波斯猫和巴厘猫都继承自猫,而沙皮狗和斑点狗都继承足够,如下图所示:

2.继承示例

1.定义一个父类:

2.定义一个子类:

3.运行结果:

说明:虽然子类没有定义__init__方法,但是父类有,所以在子类继承父类的时候这个方法就被继承了,所以只要创建Bosi的对象,就默认执行了那个继承过来的__init__方法

总结:子类在继承的时候,在定义类时,小括号()中为父类的名字

·父类的属性、方法,会被继承给子类

需要注意的是:

总结:Ⅰ私有的属性,不能通过对象直接访问,但是可以通过方法访问

Ⅱ 私有的方法,不能通过对象直接访问

Ⅲ 私有的属性、方法,不会被子类继承,也不能被访问

Ⅳ 一般情况下,私有的属性、方法都是不对外公布的,往往用来做内部的事情,起到安全的作用

3.多继承

1.Python中多继承的格式如下:

说明:python中是可以多继承的,在java中叫接口

          父类中的方法、属性,子类会继承

2.如果父类A和父类B中,有一个同名的方法,那么通过子类去调用的时候,调用哪个?

运行结果:

由此可见:是按照继承对象的先后顺序进行继承的,这点可能与现实中子女的继承有所不同。

4.重写父类方法与调用父类方法

1.重写父类方法

所谓重写,就是子类中,有一个和父类相同名字的方法,在子类中的方法会覆盖掉父类中同名的方法

2.调用父类的方法

这里我写了个实际例子:

运行结果:

5.类属性和实例属性

先来谈一下类属性和实例属性

在前面的例子中我们接触到的就是实例属性(对象属性),顾名思义,类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本,这个和C++中类的静态成员变量有点类似。对于公有的类属性,在类外可以通过类对象和实例对象访问

�1.类属性

2.实例属性

总结:

3.通过实例(对象)去修改类属性

代码:

运行结果:

代码:

运行结果:

总结:如果需要在类外修改类属性,必须通过类对象去引用然后进行修改。如果通过实例对象去引用,会产生一个同名的实例属性,这种方式修改的是实例属性,不会影响到类属性,并且之后如果通过实例对象去引用该名称的属性,实例属性会强制屏蔽掉类属性,即引用的是实例属性,除非删除了该实例属性。

6.静态方法和类方法

1.类方法

是类对象所拥有的方法,需要用修饰器@classmethod来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数(当然可以用其他名称的变量作为其第一个参数,但是大部分人都习惯以'cls'作为第一个参数的名字,就最好用'cls'了),能够通过实例对象和类对象去访问。

代码一:

运行结果:

代码二:

运行结果:

代码三:

分析如下:

2.静态方法

需要通过修饰器@staticmethod来进行修饰,静态方法不需要多定义参数

运行结果:

总结

从类方法和实例方法以及静态方法的定义形式就可以看出来,类方法的第一个参数是类对象cls,那么通过cls引用的必定是类对象的属性和方法;而实例方法的第一个参数是实例对象self,那么通过self引用的可能是类属性、也有可能是实例属性(这个需要具体分析),不过在存在相同名称的类属性和实例属性的情况下,实例属性优先级更高。静态方法中不需要额外定义参数,因此在静态方法中引用类属性的话,必须通过类对象来引用

- 家具的例子

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端知识分享

js数组常用方法总结

最近工作中经常用到数组操作,每次都傻傻不知道怎么用,今天有时间整理了一下,希望对大家有帮助!这些基础的知识,要熟记于心。

7003
来自专栏HTML5学堂

JavaScript | 获取数组中的单词并统计出现次数

HTML5学堂(码匠):如何通过JavaScrip实现数组元素的查找?在一个数组当中,找到所有的单词,并统计每个单词出现的次数。 功能需求 在一个自定义数组...

4887
来自专栏数据结构笔记

python基础类型(三):可调用类型——函数和方法

在 python中所有的类型都是对象,即使是 int,float这些其他语言中的基础类型在 python中也是以对象的形式存在,函数和方法也不例外。

1103
来自专栏Jackson0714

正则表达式全部符号解释

35415
来自专栏Golang语言社区

深入解析golang编程中函数的用法

函数是一组一起执行任务的语句。每Go程序具有至少一个函数,它一般是main(),以及所有的最琐碎程序可以定义附加函数。 你可以将代码放到独立的功能。如何划分代码...

3597
来自专栏小鹏的专栏

用一个脚本学习 python

# -*- coding: utf-8 -*- # Python 2.7 学习参考脚本 # print 打印函数 print "Hello Worl...

2907
来自专栏步履前行

Java基础系列---static关键字

  今天在和同事讨论的时候谈到了关于static的问题,正巧自己有一些忘记了,就特来学习一番。

1304
来自专栏大闲人柴毛毛

C++快速入门

引用变量 引用一个变量就是定义了一个变量,和原来的变量使用同一个值。引用变量将值改变,原来这个变量的值也随之改变。 它和传地址的性质一致。 /** *定义一...

3305
来自专栏技术之路

指针数组和数组指针

指针数组 :就是指针的数组,数组的元素是指针;  数组指针:就是指向数组的指针。 简单举例说明:     int *p1[10];    声明了一个数组,数组的...

2139
来自专栏测试开发架构之路

C++之迭代器

迭代器的概念 迭代器是用来访问string对象或vector对象的元素的,类似于下标运算和指针。 其对象是容器中的元素或string对象中的字符; 使用迭代器可...

3035

扫码关注云+社区

领取腾讯云代金券