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 什么是编码? 人类能够识 ...
随机推荐
- 虚拟化代码博客 good
推荐网站和博客地址 -------------------------------- 虚拟化代码博客 QEMU大牛博客:qemu - 韋任的維基百科 http://people.cs.nctu ...
- CrashRpt_v.1.4.2_vs2008_also_ok
1.windows多线程程序release版崩溃记录工具,便于该如何查找错误. 2.此工具主要用来配置windbug工具,一种排查程序发布版本崩溃这种非常难处理的缺陷的方法,非常棒,amazing! ...
- SYN5006型电机同步编码脉冲分配器
SYN5006型电机同步编码脉冲分配器 编码器信号分配板增量式编码器脉冲分配器使用说明视频链接: http://www.syn029.com/h-pd-81-0_310_13_-1.html 请将此链 ...
- 玩转Java多线程(乒乓球比赛)
转载请标明博客的地址 本人博客和github账号,如果对你有帮助请在本人github项目AioSocket上点个star,激励作者对社区贡献 个人博客:https://www.cnblogs.com/ ...
- 信鸽推送在springboot中出现jar包冲突问题
错误提示 : java.lang.NoSuchMethodError: org.json.JSONObject.put(Ljava/lang/String;Ljava/util/Collection; ...
- Unity 通用透明物体漫反射Shader(双面渲染&多光源&光照衰减&法线贴图&凹凸透明度控制)
Shader "MyUnlit/AlphaBlendDiffuse" { Properties { _Color("Color Tint(贴图染色)",Colo ...
- linux运维人员常用150个命令汇总
命令 功能说明 线上查询及帮助命令(2个) man 查看命令帮助,命令的词典,更复杂的还有info,但不常用. help 查看Linux内置命令的帮助,比如cd命令. 文件和目录操作命令(18个) l ...
- jmeter安装与部署
1.JDK组件安装 jmeter是一款java开发的测试软件,需要JDK运行环境支持,因此在安装jmeter前需要安装调试好jdk运行环境.jmeter3.2需要1.8以上版本jdk才可以正常运行.首 ...
- CSS3过渡与动画
一.CSS3 过渡 transition-property 规定过渡效果的 CSS 属性名 -webkit-transition-property: none / all / property; -m ...
- JDK源码阅读(三):ArraryList源码解析
今天来看一下ArrayList的源码 目录 介绍 继承结构 属性 构造方法 add方法 remove方法 修改方法 获取元素 size()方法 isEmpty方法 clear方法 循环数组 1.介绍 ...