#!/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. 【论文阅读】Second-order Attention Network for Single Image Super-Resolution

    概要 近年来,深度卷积神经网络(CNNs)在单一图像超分辨率(SISR)中进行了广泛的探索,并获得了卓越的性能.但是,大多数现有的基于CNN的SISR方法主要聚焦于更宽或更深的体系结构设计上,而忽略了 ...

  2. 科研画图:散点连接并平滑(基于Matlab和Python)

    导师要求参照别人论文中的图(下图),将其论文中的图画美观些,网上关于科研画图相关的代码比较少,就自己鼓捣了下. 附上自己整合验证过的代码: 功能:将散点连接并平滑 1)Matlab 效果图: x1=[ ...

  3. mysql用户数据库只读权限提升全局权限

    1.只读用户登录数据库 2.执行命令: mysql> unlock tables;mysql> set global read_only=0;

  4. 构建LVS负载均衡集群——NAT模式(最简单方式)

    一.装备一台lvs调度器主机要求两个网卡一个为内部局域网ip,一个为公网ip #IP地址设置过程不再重复 [root@localhost ~]# ip a | grep eth0 #内网ip : et ...

  5. angularjs事件通信$on,$emit,$broadcast详解

    公司项目开发用的是angularjs,关于事件通讯一直用的是EventBus,直到上周写一个小组件懒得引用EventBus时,想到用angularjs自带的事件通信时,结果很尴尬的忘记原生方法单词怎么 ...

  6. css的伪元素 ::after ::before 和 图标字体的使用

    浅谈css的伪元素::after和::before   css中的::after和::before已经被大量地使用在我们日常开发中了,使用他们可以使我们的文档结构更加简洁.但是很多人对::after和 ...

  7. 序列化禁止使用Optional

    1: 概论 Optional 是Java8用来改变java引发NPE的解决办法,但是不是绝对的解决办法 2: 例子: 很多博文一上来就给力以下使用例子 @Data public class User ...

  8. 使用os模块动态获取目录或文件路径

    在接口自动化测试框架中,我们的代码除了能在本地运行,也能在不在修改代码的前提下在其他的环境下能够运行,这样才能达到高复用性和低维护成本,我们在接口测试的模块调用中,会定义很多相关路径,而这些路径必须使 ...

  9. 获取系统相关信息 (CPU使用率 内存使用率 系统磁盘大小)

    引言 在软件开个过程中,对于软件的稳定性和使用率也是我们需要关注的 .  使用sigar来监控,简单方便!  使用说明:下载sigar jar及配合sigar的dll文件来用,需要将dll文件放到JD ...

  10. SpringBoot开发案例之mail中文附件名字乱码

    最近在开发一个邮件发送多附件的微服务,使用的是org.springframework.mail.javamail.JavaMailSender;包下面的JavaMailSender 但是发送出来的附件 ...