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关键字和类名就可以定义一个类 . 类的访问控制符--有三个,.] = ] = ] = ;.声明参数 .用接口声明方法 .理解模块--一个文件就是一个模块,就是这么个意思 ,不用想的多么高大 ...
随机推荐
- React中循环渲染类似Vue中 的v-for
17==>循环数组 类似v-for import React, { Component } from "react"; export default class CharSh ...
- acwing 2 零一背包问题
地址 https://www.acwing.com/problem/content/description/2/ 题目描述有 N 件物品和一个容量是 V 的背包.每件物品只能使用一次. 第 i 件物品 ...
- BERT-wwm、BERT-wwm-ext、RoBERTa、SpanBERT、ERNIE2
一.BERT-wwm wwm是Whole Word Masking(对全词进行Mask),它相比于Bert的改进是用Mask标签替换一个完整的词而不是子词,中文和英文不同,英文中最小的Token就是一 ...
- autojump--懒人利器
只有打开过的目录 autojump 才会记录,所以使用时间越长,autojump 才会越智能. 可以使用 autojump 命令,或者使用短命令 j. 跳转到指定目录 j directoryName ...
- 1+x 证书 Web 前端开发中级理论考试(试卷 6 )
1+x 证书 Web 前端开发中级理论考试(试卷 6 ) 官方QQ群 1+x 证书 web 前端开发初级对应课程分析 http://blog.zh66.club/index.php/archives/ ...
- 使用Kafka建立可靠的高性能分布式消息传递基础结构
在优锐课学习中了解到,我们可以看到实施资源适配器以将Kafka与企业Java解决方案集成.码了很多专业的相关知识, 分享给大家参考学习. 由于世界已经变得移动化,因此应用程序现在必须实时提供数据. 不 ...
- 如何查看laravel门脸类包含方法的源码
以Route门脸类为例,我们定义路由时使用的就是Route门脸类,例如我们在web.php中定义的路由 use Illuminate\Support\Facades\Route; Route::get ...
- C#上手练习7(方法语句2)
上一篇方法调用赋值封装,这里使用封装后调用,尽量满足开闭原则. 以及静态类的使用. using System; namespace KingTest03 { class Program { int a ...
- 教你如何用Python向手机发送通知
------------恢复内容开始------------ 你曾想尝试在服务器端或电脑上向手机发送通知吗? 你曾烦恼过企业邮箱的防骚扰机制吗? 现在,我们可以用一种简单轻松的方法来代替企业邮箱了! ...
- File获取当前目录下的所有子项 listFiles()
package seday03; import java.io.File; /** * 获取一个目录中的所有子项 * @author xingsir */public class ListFilesD ...