#!/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_面向对象特性的更多相关文章

  1. Java语言中的面向对象特性总结

    Java语言中的面向对象特性 (总结得不错) [课前思考]  1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类?  2. 面向对象编程的特性有哪三个?它们各自又有哪些特性?  3. 你知 ...

  2. Javascript面向对象特性实现封装、继承、接口详细案例——进级高手篇

    Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript ...

  3. 浅谈Objective—C中的面向对象特性

    Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...

  4. javascript进阶——面向对象特性

    面向对象的javascript是这门语言被设计出来时就考虑的问题,熟悉OOP编程的概念后,学习不同的语言都会发现不同语言的实现是不同的,javascript的面向对象特性与其他具有面向对象特性的语言的 ...

  5. C++对C语言的非面向对象特性扩充(3)

    今天要讲的是C++作用域运算符"::",强制类型转换的扩充,C++中相对于C中malloc和free函数的运算符new和delete,以及C++对C的一个重要扩充:引用(refer ...

  6. .NET面向对象特性之封装

    .NET面向对象特性之封装 面向对象的基本内容由:类.对象.属性.方法.字段构成. 面向对象的三大特性:继承.多态.封装. 关于面向对象的特性很多人都把目光转向了继承.多态和接口,却很少有人提及过封装 ...

  7. .NET面向对象特性之多态

    .NET面向对象特性之多态 前言 上一篇总结了面向对象三大特性之一的继承,再接再厉,这一章继续总结多态.同时把继承中涉及到多态的内容进一步补充扩展.可以说“继承”是多态的根基.但继承主要关注的是“共通 ...

  8. .NET面向对象特性之“继承”

    整体简介 1.理解继承——继承关系图 2.实现继承与接口多继承 3.new. virtual.override方法 4.抽象方法和抽象类的继承 5.继承的本质 6.继承的复用性.扩展性和安全性 7.多 ...

  9. TypeScript -- 面向对象特性

    .class关键字和类名就可以定义一个类 . 类的访问控制符--有三个,.] = ] = ] = ;.声明参数 .用接口声明方法 .理解模块--一个文件就是一个模块,就是这么个意思 ,不用想的多么高大 ...

随机推荐

  1. 004.MongoDB数据库基础使用

    一 数据库管理 1.1 创建数据库 [root@uhost ~]# mongo --host 172.24.9.225 --port 27017 -u useradmin -p useradmin & ...

  2. Vue动态加载图片图片不显示

    图片是放在assets文件夹下的 使用require进行解决 图片不显示的原因 在webpack,将图片放在assets中,会将图片图片来当做模块来用,因为是动态加载的,所以url-loader将无法 ...

  3. shell 下

    一句话来概括shell    shell是一个基于Linux内核和应用程序之间的一个解释器 Shell解释器    /bin/sh    /bin/bash  目前多用的是bash    /sbin/ ...

  4. CF1253E Antenna Coverage(DP)

    本题难点在正确性证明. 令 \(f_i\) 表示 \([1,i]\) 被全部覆盖的最小花费.答案为 \(f_m\). 首先发现,添加一个区间 \([0,0]\) 不会影响答案.所以 \(f_i\) 的 ...

  5. golang数据结构之树的三种遍历方式

    tree.go package tree import ( "fmt" ) type TreeNode struct { ID int Val int Left *TreeNode ...

  6. golang之引用自己定义的包

    初始目录如下: 其中main.go只有一个主函数main(),用于运行程序,array文件夹是自己定义的包,里面spArr.go位于package array. spArr中的函数名或变量首字母得大写 ...

  7. python服务不能在docker容器里运行的问题

    在开发过程中,我们将mysql.redis.celery等服务在docker容器里跑,项目在本地运行,便于debug调试 docker-compose -f docker-compose-dev.ym ...

  8. SpringBoot系列之profles配置多环境(篇二)

    SpringBoot系列之profles配置多环境(篇二) 继续上篇博客SpringBoot系列之profles配置多环境(篇一)之后,继续写一篇博客进行补充 写Spring项目时,在测试环境是一套数 ...

  9. 11-Django站点管理

    站点管理 内容发布的部分由网站的管理员负责,包括查看.添加.修改.删除数据 开发这些重复的功能是一件单调乏味.缺乏创造力的工作,为此,Django能够根据定义的模型类自动地生成管理模块 在Django ...

  10. Long类型数据前端精度丢失

    问题描述 后端把Long类型的数据传给前端,前端可能会出现精度丢失的情况.例如:201511200001725439这样一个Long类型的整数,传给前端后会变成201511200001725440 相 ...