Python入门基础(9)__面向对象编程_3
- 继承
子类自动继承父类的所有方法和属性
继承的语法:
class 类名(父类名)
pass
1.子类继承父类,可以直接使用父类中已经封装好的方法,不需要再次开发
2.子类可以根据需求,封装自己特有的属性和方法
3.当父类中的方法满足不了子类的需求时,可以对方法进行重写
例如:
import math
#类的继承
class Shape():
def __init__(self,color):
self.color = color def area(self):
return None def show_color(self):
print(self.color) class Circle(Shape):
def __init__(self,color,r):
super().__init__(color)
self.r = r def area(self):
return math.pi*self.r*self.r class Rectingle(Shape):
def __init__(self,color,Height,Width):
super().__init__(color) #记得给super加上()
self.Height = Height
self.Width = Width def area(self):
return self.Width*self.Height circle = Circle('blue',5.0)
print(circle.area())
circle.show_color()
recent = Rectingle('red',5.0,2.0)
print(recent.area())
recent.show_color()
结果:
78.53981633974483
blue
10.0
red
- __new__方法
python中定义的类,在创建实例对象的时候,会自动执行init()方法,但是在执行init()方法之前,会执行new()方法
__new()__的作用有两个
1.在内存中为内存分配空间
2.返回对象的引用(对象的内存地址)
python解释器在获得引用的时候会将其传递给init()方法中的self
class A():
def __new__(cls, *args, **kwargs):
print('__new__')
return super().__new__(cls) #这里一定要返回,否则init不会被执行
def __init__(self): #这里的self就是new方法中的return返回值
print('__init__') a = A()
结果:
__new__
__init__
- 单例模式
如果我们创键两个实例a1 = A()
a2 = A()
那么我们使用id(a1),id(a2)会发现值是不同的,也就是说我们创键了两个实例对象,用了两份内存地址
如果我们想先创建一个实例对象,之后不管创键多少个,返回的永远是第一个实例对象的内存地址,那么我们可以这样实现
#单例模式
#重写new方法很固定,返回值必须是这个
#这样就避免了创键多份
#创键第一个实例的时候,_instance还是None,那么会分配空间创键实例
#此时类属性已经被修改,_instance不再为None
#那么当后面实例属性被创建的时候,由于_instance不为None
#则返回第一个实例对象的引用,即内存地址
class B():
_instance = None
def __new__(cls, *args, **kwargs):
if B._instance == None:
B._instance = super().__new__(cls)
return B._instance a = B()
print(id(a))
b = B()
print(id(b))
结果:
2706206100280
2706206100280
Python入门基础(9)__面向对象编程_3的更多相关文章
- Python入门基础(9)__面向对象编程_2
__str__方法 如果在开发中,希望使用print输出对象变量时,能够打印自定义的内容,就可以利用__str__这个内置方法了 注意:__str__方法必须返回一个字符串 class Cat(): ...
- Python入门基础(9)__面向对象编程_1
定义一个只包含方法的类 class 类名: def 方法1(self,参数列表): pass def 方法2(self,参数列表): pass 当一个类定义之后,要使用这个类来创键对象.语法如下: 对 ...
- python 入门基础22 --复习 面向对象
面向过程编程思想: 核心:过程 过程指的是解决问题的具体步骤,即先干什么再干什么. 基于该编程思想编写程序,相当于一条流水线,一种机械式的思维方式. 面向对象编程思想: 核心:对象 对象指的是数据与方 ...
- Python学习-第三天-面向对象编程基础
Python学习-第三天-面向对象编程基础 类和对象 简单的说,类是对象的蓝图和模板,而对象是类的实例.这个解释虽然有点像用概念在解释概念,但是从这句话我们至少可以看出,类是抽象的概念,而对象是具体的 ...
- Python入门基础学习 二
Python入门基础学习 二 猜数字小游戏进阶版 修改建议: 猜错的时候程序可以给出提示,告诉用户猜测的数字偏大还是偏小: 没运行一次程序只能猜测一次,应该提供多次机会给用户猜测: 每次运行程序,答案 ...
- [.net 面向对象编程基础] (2) 关于面向对象编程
[.net 面向对象编程基础] (2) 关于面向对象编程 首先是,面向对象编程英文 Object-Oriented Programming 简称 OOP 通俗来说,就是 针对对象编程的意思 那么问 ...
- 简学Python第三章__函数式编程、递归、内置函数
#cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...
- 简学Python第六章__class面向对象编程与异常处理
Python第六章__class面向对象编程与异常处理 欢迎加入Linux_Python学习群 群号:478616847 目录: 面向对象的程序设计 类和对象 封装 继承与派生 多态与多态性 特性p ...
- Python 入门基础6 --字符编码、文件操作1
今日内容: 1.字符编码 2.字符与字节 3.文件操作 一.字符编码 了解: cpu:将数据渲染给用户 内存:临时存放数据,断电消失 硬盘:永久存放数据,断电后不消失 1.1 什么是编码? 人类能够识 ...
随机推荐
- Delphi 10.2 Tokyo的新特性
Delphi 10.2(Tokyo)出来一段时间了,最重要的新特性就是支持Linux的服务端. 官网有详细的介绍: 这里是主要的特性介绍:https://www.embarcadero.com/pro ...
- Hive 学习之路(六)—— Hive 视图和索引
一.视图 1.1 简介 Hive 中的视图和RDBMS中视图的概念一致,都是一组数据的逻辑表示,本质上就是一条SELECT语句的结果集.视图是纯粹的逻辑对象,没有关联的存储(Hive 3.0.0引入的 ...
- a元素变成块状元素点击之后删除出现背景
a { text-decoration: none; background: none; -webkit-tap-highlight-color: transparent; } a:hover { - ...
- 正则RegExp对象的用法
RegExp实例方法: 1.Test() RegExpObject.test(string) 判断string中是否有与表达式匹配的字符串,有则返回true,否则返回false 例如 var patt ...
- C++用EGE简单实现别踩白块游戏
本项目已开源:https://github.com/wmpscc/AvoidBlank 关于EGE 介绍:EGE(Easy Graphics Engine),是windows下的简易绘图库,是一个类似 ...
- [hdu-6395]Sequence 分块+矩阵快速幂
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6395 因为题目数据范围太大,又存在递推关系,用矩阵快速幂来加快递推. 每一项递推时 加的下取整的数随 ...
- Dungeon Master POJ - 2251(bfs)
对于3维的,可以用结构体来储存,详细见下列代码. 样例可以过,不过能不能ac还不知道,疑似poj炸了, #include<iostream> #include<cstdio> ...
- Python连载20-偏函数&zip函数&enumerate函数
一. 偏函数 二. #先举个例子 #把字符串转换为十进制数字 int(') #help(int),int函数中有一个参数base代表把它转换某个进制的数字 #把八进制的字符串转换为十进制 eight ...
- html、javascript、url特殊字符的转义诠释及使用方法详解
html.javascript.url特殊字符转义在实际编程中都是有用到的,有的人对特殊字符转义的使用不是很清楚,下面就对html,javascript,url特殊字符的转义做一下说明和归纳. htm ...
- shell 循环打印某一天后的n天的日期
#!/bin/bash start_date="2017-10-26" for i in `seq 0 30` do num=$((${i}+1)) datatime=`date ...