Python基础 第7章 再谈抽象
1. 1 多态
多态,即便不知道变量指向的是哪种对象,也能对其执行操作,且操作的行为将随对象所属的类型(类)而异。
1.2 多态与方法
当无需知道对象是什么样的就能对其执行操作时,都是多态在起作用。
# 使用random模块种的choice函数,随机从序列中选择一个元素
from random import choice
x = choice(['Hello world!', [1, 2, 'e', 'e', 4]]) print(x.count('e')) 结果:1
1.3 封装
封装是指,向外部隐藏不必要的细节。
封装不同于多态,多态让你无需知道对象所属的类(对象的类型)就调用其方法,而封装让你无需知道对象的构造就能使用它。
1.4 继承
2. 类
每个对象都属于特定的类,并被称为该类的实例。在Python中,约定使用英语单数并将首字母大写表示类,如Bird和Lark。
2.1 创建自定义类
# 创建自定义类
class Person: def set_name(self, name):
self.name = name def get_name(self):
return self.name def greet(self):
print("Hello, World! I'm {}.".format(self.name)) foo = Person()
foo.set_name('Luke Skywallker')
print(foo.greet()) 结果:
Hello, World! I'm Luke Skywallker.
None
3 属性、函数和方法(不是很懂)
方法和函数的区别表现在前一节提到的参数self上。
方法(或者说是 关联的方法)将其第一个参数关联到它所属的实例,因此无需提供这个参数。
class Class:
def method(self):
print('I have a self!') def function():
print("I don't know....") instance = Class()
# print(instance.method()) # 为什么会连续打印两个结果1)I have a self! 2)None
instance.method()
instance.method = function
instance.method()
4 再谈隐藏
# 将属性定义为私有,私有属性不能从对象外部访问,只能通过存取器方法(如get_name和set_name)来访问
# 要让方法或属性成为私有的(不能从外部访问),只需让其名称以两个下划线打头即可
class Secretive:
def __inaccessible(self):
print("Bet you can't see me...") def accessible(self):
print("The secret message is: ")
self.__inaccessible() s = Secretive()
# s.__inaccessible() 报错如下:
# Traceback (most recent call last):
# File "D:/Python/PycharmProjects/untitled1/venv/Robots_learning.py", line 1619, in <module>
# s.__inaccessible()
# AttributeError: 'Secretive' object has no attribute '__inaccessible' s.accessible() #结果如下:
# The secret message is:
# Bet you can't see me...
Python基础 第7章 再谈抽象的更多相关文章
- Python学习6——再谈抽象(面对对象编程)
1.对象魔法 在面对对象编程中,术语对象大致意味着一系列数据(属性)以及一套访问和操作这些数据的方法. 使用对象而非全局变量以及函数的原因有多个,而最重要的好处不过以下几点: 多态:可对不同类型的对象 ...
- Python基础 第三章 使用字符串(3)字符串方法&本章小结
字符串的方法非常之多,重点学习一些最有用的,完整的字符串方法参见<Python基础教程(第三版)>附录B. 模块string,虽然风头已小,但其包含了一些字符串方法中没有的常量和函数,故将 ...
- 第十三章 Python基础篇结束章
从2019年3月底开始学习Python,4月份开始在CSDN发博客,至今不到半年,老猿认为博客内容中关于Python基础知识的内容已经基本告一段落,本章进入Python基础知识结束章节,对Python ...
- Python基础 第6章 抽象
1. 引言及抽象和结构 生成斐波那契数列的代码如下: fibs = [0, 1] num = int(input('How many num you want:')) for x in range(n ...
- Python基础教程-第一章-变量、函数、字符串
1.1变量 变量基本上就是代表(或者引用)某个值的名字,举例来说,如果希望用x代表3,只需要执行下面的语句即可: >>>x = 3 这样的操作称为赋值(assignment),值3赋 ...
- Python基础 第四章 字典(2)字典方法&章小结
1. clear 方法clear删除所有的字典项,就地执行,什么都不返回(或者说返回None) d = {} d['name'] = 'Gumby' d['age'] = 42 print(d) re ...
- python基础教程-第二章-列表和元组
本章将引入一个新的概念,:数据结构.数据结构是通过某种方式(例如对元素进行编号)组织在 一起的数据元素的集合,这些数据元素可以是数字或者字符,甚至可以是其他数据结构.在python中,最基本的数据结构 ...
- Python基础 第5章 条件、循环及其他语句(1)
1. print和import 1.1 打印多个参数 可用 + 连接多个字符串,可保证被连接字符串前无空格: 可用sep=“_”,自定义各种分隔符: print("I"," ...
- Python基础 第5章 条件、循环及其他语句(2)
6. 简单推导 列表推导,是一种从其他列表创建列表的方式,其原理类似于for循环. list1 = [x * x for x in range(10)] print(list1) 结果: [0, 1, ...
随机推荐
- geometry_msgs/PoseStamped 类型的变量的构造
#navpoint.msg geometry_msgs/PoseStamped target_pose uint8 floor uint8 type target_pose 的类型为geometry_ ...
- 模板 - Codeforces模板
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN = 2e5; const ...
- 什么是vue的全家桶
vue.js有著名的全家桶系列,包含了vue-router,vuex, vue-resource,再加上构建工具vue-cli,就是一个完整的vue项目的核心构成.
- mapper @Select()注解开发,使用模板 if 和循环
if @Select({"<script>", "SELECT " + " mu.id userId, " + " e ...
- Go --- 七牛云 上传文件 & Token demo
package main import ( "bytes" "crypto/hmac" "crypto/sha1" "encodi ...
- How to transform the day time images to night time ? A series of paper review and some thinkings about this point.
How to transform the day time images to night time ? A series of paper review and some thinkings ab ...
- linux内核中#if IS_ENABLED(CONFIG_XXX)与#ifdef CONFIG_XXX的区别
1. #if IS_ENABLED(CONFIG_XXX) 1.1 IS_ENABLED的定义如下: /* * IS_ENABLED(CONFIG_FOO) evaluates to 1 if CON ...
- VSCode 设置 Tab 空格
Windows 点击左下角的 Setting 按钮 输入 tabSize 进行查找
- i18n 语言码和对应的语言库
语言码 语言名称 af Afrikaans am Amharic ar Arabic az Azerbaijani be Belarusian bg Bulgarian bh Bihari bn Be ...
- web手工项目01-系统组织框架-测试流程-需求评审-测试计划与方案
回顾 SVN(定义,作用,使用操作) 软件缺陷(定义,表现形式,原因和根源,基本内容,跟踪流程) JIRA(基本介绍,使用者,工作流,问题,使用) 学习目标 掌握WAMP的环境搭建 掌握熟悉项目的步骤 ...