day7_面向对象特性
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019/7/12 14:50
# @Author : 大坏男孩
# @File : day7_面向对象特性.py
# @Software: PyCharm
# @license : Copyright(C), 未来集团有限公司
# @Contact : 110@163.com """
面向对象的特性:
继承:1、在python里,面向对象的继承,叫多继承
2、当子类继承父类后,子类调用属性时,先找自己的属性字典;
如果没有,再找父类的属性字典,父类没有就报错
3、MRO继承顺序:广度优先。简单来说是从左到右。
通过 子类.mro 查看继承顺序
4、如果类没有继承父类,默认继承object类
多态:不同的对象调用相同的方法产生不同的结果
封装:私有变量 -->格式1:_变量名 协议:当变量定义为私有变量时,不应该直接去访问它
-->格式2:__变量名 私有变量储存在属性字典时,会在变量名前拼接上 _类名
储存结果是 _类名__变量名
私有函数 -->格式:__函数名
1、把相似的类、相同的代码、相同的函数或者重复的代码,写成一个函数或者类
2、把类的所有属性声明为私有属性,提供一个接口给访问者,访问者通过这个接口来访问类当中的属性
""" class I():
jiayou = "加油"
def add(self):
print("我是我") class You(I):
# jiayou = "come on"
def add(self):
print("你是你") print(You.jiayou)
You.add(666) class A(): # A默认继承object类,等效于class A(object)
def test(self):
print("我是A") class B():
pass class C(A):
def test(self):
print("我是C") class D(B):
pass class E(C):
def test(self):
print("我是E") class F(D, E):
pass class G(E):
pass class I(E):
pass class H(F, I, G):
pass # 打印继承顺序,返回列表
print(H.mro()) # 多态:不同的对象调用相同的方法产生不同的结果
class H2O:
def __init__(self,name,temperature):
self.name = name
self.temperature = temperature def turn_ice(self):
if self.temperature < 0:
print("{}温度太低结冰".format(self.name))
elif self.temperature in range(1,100):
print("{}没有任何变化".format(self.name))
else:
print("{}温度太高变为水蒸气".format(self.name)) class Water(H2O):
pass
class Ice(H2O):
pass
class Steam(H2O):
pass w1 = Water("水",25)
i1 = Ice("水",-20)
s1 = Steam("水",666) w1.turn_ice()
i1.turn_ice()
s1.turn_ice() # 私有变量和私有函数
class Sum():
def __init__(self,value):
self.__value = value def __add(self,x):
return x + self.__value def network(self,x):
"""接口--访问者可以通过这个接口来访问类中的属性"""
data = self.__add(x)
return data
和 = Sum(66)
# print(和.__dict__)
if __name__ == "__main__":
n = Sum(30)
print(n.network(5)) # print(__name__) class NameGood:
__a = 666666
print(__a) # 打印NameGood类的属性字典
print(NameGood.__dict__) # 调试程序:
if __name__ == "__main__":
# 打印NameGood类的私有变量__a
print(NameGood._NameGood__a)
# 新建一个对象namegood,没有参数
namegood = NameGood()
# 打印对象namegood的属性字典
print(namegood.__dict__)
# print(namegood.__a)
day7_面向对象特性的更多相关文章
- Java语言中的面向对象特性总结
Java语言中的面向对象特性 (总结得不错) [课前思考] 1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类? 2. 面向对象编程的特性有哪三个?它们各自又有哪些特性? 3. 你知 ...
- Javascript面向对象特性实现封装、继承、接口详细案例——进级高手篇
Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript ...
- 浅谈Objective—C中的面向对象特性
Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...
- javascript进阶——面向对象特性
面向对象的javascript是这门语言被设计出来时就考虑的问题,熟悉OOP编程的概念后,学习不同的语言都会发现不同语言的实现是不同的,javascript的面向对象特性与其他具有面向对象特性的语言的 ...
- C++对C语言的非面向对象特性扩充(3)
今天要讲的是C++作用域运算符"::",强制类型转换的扩充,C++中相对于C中malloc和free函数的运算符new和delete,以及C++对C的一个重要扩充:引用(refer ...
- .NET面向对象特性之封装
.NET面向对象特性之封装 面向对象的基本内容由:类.对象.属性.方法.字段构成. 面向对象的三大特性:继承.多态.封装. 关于面向对象的特性很多人都把目光转向了继承.多态和接口,却很少有人提及过封装 ...
- .NET面向对象特性之多态
.NET面向对象特性之多态 前言 上一篇总结了面向对象三大特性之一的继承,再接再厉,这一章继续总结多态.同时把继承中涉及到多态的内容进一步补充扩展.可以说“继承”是多态的根基.但继承主要关注的是“共通 ...
- .NET面向对象特性之“继承”
整体简介 1.理解继承——继承关系图 2.实现继承与接口多继承 3.new. virtual.override方法 4.抽象方法和抽象类的继承 5.继承的本质 6.继承的复用性.扩展性和安全性 7.多 ...
- TypeScript -- 面向对象特性
.class关键字和类名就可以定义一个类 . 类的访问控制符--有三个,.] = ] = ] = ;.声明参数 .用接口声明方法 .理解模块--一个文件就是一个模块,就是这么个意思 ,不用想的多么高大 ...
随机推荐
- NXP_RTCESL库
恩智浦实时控制嵌入式软件库(缩写为RTCESL,以前为恩智浦嵌入式软件库FSLESL)是一组算法,从基础数学运算到高级数学变换以及高级观测器,这些都可以方便地用在复杂的实时控制应用中以及我们的电机控制 ...
- 201871010105-曹玉中《面向对象程序设计(Java)》第一周学习总结
201871010105-曹玉中<面向对象程序设计(Java)>第一周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这 ...
- 阿里Nacos-配置-多环境
多环境的配置隔离是配置中心最基础的一个功能之一.不同的环境配置的值不一样,比如数据库的信息,业务的配置等. Spring Boot 多环境配置 首先我们来回顾下在Spring Boot中用配置文件的方 ...
- Linux 命名管道
前文中笔者介绍了管道,本文接着介绍命名管道.文中演示所用环境为 Ubuntu 18.04 desktop. 命名管道(named pipe)又被称为先进先出队列(FIFO),是一种特殊的管道,存在于文 ...
- golang--redis基本介绍
redis(remote-dictionary-system)即远程字典服务器,是NoSQL数据库: 适合做缓存以及持久化: 免费开源,高性能的分布式内存数据库: redis的安装和使用: 下载Red ...
- 【TCP/IP网络编程】:02套接字类型与协议设置
本篇文章主要介绍创建套接字函数相关的3个输入参数的含义,它们最终确定了套接字通信所采用的协议.同时,也简单对比了TCP和UDP传输方式的区别. 什么是协议?协议是对话中使用的通信规则,而在计算机领域则 ...
- Zookeeper集群的"脑裂"问题处理 - 运维总结
关于集群中的"脑裂"问题,之前已经在这里详细介绍过,下面重点说下Zookeeper脑裂问题的处理办法.ooKeeper是用来协调(同步)分布式进程的服务,提供了一个简单高性能的协调 ...
- appium 使用name 定位报错 Locator Strategy 'name' is not supported for this session【appium-desktop】
RF中使用 name定位 报错提示: Locator Strategy 'name' is not supported for this session 解决: 1.打开本地文件 driver.js ...
- 基于Node 的http转发demo,项目中请使用express+http-proxy-middleware
var http = require("http"); var data = ''; function getData() { const options = { host: 'w ...
- SpringMVC跟Struts2的区别
SpringMVC跟Struts2的区别 1.SpringMVC的入口是servlet:Struts2的入口是Filter. 2.SpringMVC性能方面会比Struts2好一点,SpringMVC ...