python3:面向对象(多态和继承、方法重载及模块)
1、多态
同一个方法在不同的类中最终呈现出不同的效果,即为多态。
class Triangle:
def __init__(self,width,height):
self.width = width
self.height = height
def getArea(self):
area=self.width* self.height / 2
return area
class Square:
def __init__(self,size):
self.size = size
def getArea(self): # 同一个方法在不同的类中最终呈现出不同的效果,即为多态
area = self.size * self.size
return area
a=Triangle(5,5)
print(a.getArea())
b=Square(5)
print(b.getArea())
执行效果如下:
2、继承
(1)子类可以继承父类所有的公有属性和公有方法:
class Father:
money = 1000000
def drive(self):
print('I can drive a car!')
class Son(Father):
pass
tom = Father()
print(tom.money)
tom.drive()
print('#'*50)
jerry=Son()
print(jerry.money)
jerry.drive()
执行后:
(2)对于父类的私有属性,子类不可以访问。
(3)对于多继承
多个父类的有相同的某个属性,子类只继承第一个父类的属性。
3、方法重载
子类重写父类的方法:
class Father:
money = 1000000
__money = 9999999
def drive(self):
print('I can drive a car!')
class Son(Father):
def drive(self): #重载父类的方法drive()
print('I can drive a tank!')
Father.drive(self) #在子类中直接调用父类的方法drive()
def pay(self):
print(self.money)
tom = Father()
print(tom.money)
tom.drive()
print('#'*50)
jerry = Son()
jerry.drive()
执行后:
重载运算符
class Mylist: #定义类Mylist
__mylist = []
def __init__(self,*args):
self.mylist = []
for arg in args:
self.__mylist.append(arg)
def __add__(self,x): #定义操作+
for i in range(0,len(self.__mylist)): #依次遍历列表,执行加操作
self.__mylist[i] = self.__mylist[i]+x
return self.__mylist
def __sub__(self,x):
pass
def __mul__(self,x):
pass
def __div__(self,x):
pass
def __mod__(self,x):
pass
def __pow__(self,x):
pass
def __len__(self,x):
pass
def show(self): #显示列表中的数值
print(self.__mylist)
if __name__ == '__main__': #通过name的内置属性
l = Mylist(1,2,3,4,5) #定义一个列表对象
l+10
l.show()
4、模块
从交互解释器导入包,并调用包中的类和方法。如下:
>>> import claMylist
>>> dir(claMylist)
['Mylist', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']
>>> import claMylist as cml
>>> ml=cml.Mylist(6,7,8,9,10)
>>> ml
<claMylist.Mylist object at 0x00000263F78D9240>
>>> ml.show() #执行类中的方法show()
[6, 7, 8, 9, 10]
>>> ml+100
[106, 107, 108, 109, 110]
>>> x=ml+100 #将执行+操作后的值存放在x中
>>> x
[206, 207, 208, 209, 210]
>>>
python3:面向对象(多态和继承、方法重载及模块)的更多相关文章
- PHP面向对象编程——深入理解方法重载与方法覆盖(多态)
什么是多态? 多态(Polymorphism)按字面的意思就是“多种状态”.在面向对象语言中,接口的多种不同的实现方式即为多态.引用Charlie Calverts对多态的描述——多态性是允许你将父对 ...
- 论python3下“多态”与“继承”中坑
1.背景: 近日切换到python3后,发现python3在多态处理上,有一些比较有意思的情况,特别记载,供大家参考... 以廖老师的python3教程中的animal 和dog的继承一节的代码做例子 ...
- Python3 面向对象-类的继承与派生
1.什么是继承? 继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类可称为基类或超类,新建的类称为派生类和或子类. 子类会遗传父类的属性,从而解决代码重用问题. ...
- C#面向对象(OOP)入门—第一天—多态和继承(方法重载)
面向对象是什么 面向对象是一种基于对象的编程方法,它取代了仅仅依靠方法和流程的编程方式.面向对象的编程语言中,对象(object)其实就是指特定类型.或某个类的实例.面向对象使得编程人员更容易组织和管 ...
- Python3 与 C# 面向对象之~继承与多态 Python3 与 C# 面向对象之~封装 Python3 与 NetCore 基础语法对比(Function专栏) [C#]C#时间日期操作 [C#]C#中字符串的操作 [ASP.NET]NTKO插件使用常见问题 我对C#的认知。
Python3 与 C# 面向对象之-继承与多态 文章汇总:https://www.cnblogs.com/dotnetcrazy/p/9160514.html 目录: 2.继承 ¶ 2.1.单继 ...
- java基础疑难点总结之成员变量的继承,方法重载与重写的区别,多态与动态绑定
1.成员变量的继承 1.1要点 子类用extends关键字继承父类.子类中可以提供新的方法覆盖父类中的方法.子类中的方法不能直接访问父类中的私有域,子类可以用super关键字调用父类中的方法.在子类中 ...
- C# 继承、虚方法、方法重载和多态
继承:继承属于单继承,只能继承一个父类. 继承的一个结果是派生于基类的子类在方法和属性上有一定的重叠. 继承只能够同时继承与一个基类:可以同时继承一个基类和多个接口,但是基类必须放在第一个.(注:C# ...
- 【基础】Equal方法、面向对象-多态-继承-封装
package Test; public class L3_1 { public static void main(String[] args) { C c1=new C(100); C c2=new ...
- 四. Java继承和多态3. 继承中的方法的覆盖和重载
在类继承中,子类可以修改从父类继承来的方法,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的名称.返回值类型.参数列表. 如果在新类中定义一个方法,其名称.返回值类型和参数列表正好与父类 ...
随机推荐
- Java操作文件
import java.io.File; import java.io.IOException; import java.nio.file.*; import java.nio.file.attrib ...
- MyBatis foreach标签的用法
From<MyBatis从入门到精通> 一.foreach实现in集合 1.映射文件中添加的代码: <!-- 4.4 foreach用法 SQL语句有时会使用IN关键字,例如id i ...
- bash 遍历目录
bash遍历目录脚本traverse.sh: #!/bin/bash datadir=$ declare -a dirlist dirlist=`>/dev/null` for i in ${d ...
- 生成数据库自增不重复ID的方法
namespace ConsoleApp1 { class Program { static void Main(string[] args) { ); ; i < ; i++) { var t ...
- HashSet源码分析:JDK源码系列
1.简介 继续分析源码,上一篇文章把HashMap的分析完毕.本文开始分析HashSet简单的介绍一下. HashSet是一个无重复元素集合,内部使用HashMap实现,所以HashMap的特征耶继承 ...
- C#3.0新增功能10 表达式树 04 执行表达式
连载目录 [已更新最新开发文章,点击查看详细] 表达式树 是表示一些代码的数据结构. 它不是已编译且可执行的代码. 如果想要执行由表达式树表示的 .NET 代码,则必须将其转换为可执行的 IL ...
- [leetcode] 264. Ugly Number II (medium)
263. Ugly Number的子母题 题目要求输出从1开始数,第n个ugly number是什么并且输出. 一开始想着1遍历到n直接判断,超时了. class Solution { public: ...
- spring boot入门篇
Spring Boot[快速入门] Spring Boot 概述 Build Anything with Spring Boot:Spring Boot is the starting point ...
- .Net Core2.2 WebApi上传文件
基于.net core2.2的webapi程序,接收客户端上传的文件.按照以下写法,file的值永远是null [HttpPost] public void Post([FromForm] IForm ...
- lr录制选项设置代理
解决录制时浏览器打不开录制时录不到脚本等浏览器兼容问题一.lr录制选项设置代理1.点击Options 2.点击Port Mapping→Newentrv 3.lr代理设置 ·Socket Servic ...