python是面向对象的语言。

7.1 对象的魔力

  7.1.1 多态

不管是字符串还是列表,count()函数都可以正常工作。

>>> ['ab','b','c'].count('c')
1
>>> 'abc'.count('c')
1

下面的加号 + 运算符对于整数和列表都可以起作用,而且行为不同:

>>> 1 +2
3
>>> 'fsafda' + 'fsdfs'
'fsafdafsdfs'

  7.1.2 封装

  7.1.3 继承

7.2 类和类型

  7.2.1 类到底是什么

  7.2.2 创建自己的类

self:类自动的将自己作为第一个参数传递进去,代表对象本身。

self参数事实上正是方法和函数的区别。

>>> class Person:
def setName(self, name):
self.name = name
def getName(self):
return self.name
def greet(self):
print('Hello world ! I am %s' % self.name) >>> foo = Person()
>>> bar = Person()
>>> foo.setName("jordan")
>>> bar.setName('kobe')
>>> foo.greet()
Hello world ! I am jordan
>>> bar.greet()
Hello world ! I am kobe

  7.2.3 特性、函数和方法

默认情况下,程序可以从外部访问一个对象的特性。

python并不直接支持私有方法。但是有一些小技巧可达到私有特性的效果。

为了让方法或者变量变为私有(从外部无法访问),只要在它的名字前面加上双下划线即可:

幕后是这么做的:以双下划线开始的名字都被翻译成前面加上单下划线和类名的形式,所以还是可以在类的外部调用这些私有方法和变量(这样做不好)。

如果不需要使用这种方法但是又想让其他对象不要访问内部数据,那么可以使用单下划线。这只是个习惯,但有实际效果。例如,前面有下划线的名字都不会被带星号的import语句(from module import *)导入。

  7.2.4 类的命名空间

>>> def foo(x): return x*x
>>> foo(5)
25 >>> foo2 = lambda x: x*x
>>> foo2(5)
25 

  >>> class C: 
           print('class C being defined')                // 类内部的函数也可以不用def定义,可以直接写执行语句

    class C being defined

>>> class MemberCounter:
members = 0 //类的作用域中定义了供所有成员访问的变量,用来计算类的成员数量。
def init(self):
MemberCounter.members += 1 >>> m1 = MemberCounter()
>>> m1.init()
>>> MemberCounter.members
1
>>> m2 = MemberCounter()
>>> m2.init()
>>> MemberCounter.members
2

  7.2.5 指定超类

  class SPAMFilter(Filter)   // 将其他类名写在class语句后的圆括号内可以指定超类。

  7.2.6 检查继承

issubclass函数可以检查一个类是否是另外一个类的子类

issubclass(SPAMFilter, Filter) : 判断SPAMFilter是否是Filter的子类。

  SPAMFilter.__bases__ : 得到已知类的基类。

  isinstance(s, SPAMFilter)

  7.2.7 多个超类

  class Talkingcalculator(Calculator, Talker)    //   python允许继承自多个基类,多重继承

  多重继承的两个类如果有方法同名,那么先继承的类的方法会覆盖后继承的类的方法。

  7.2.8 接口和内省

7.3 一些关于面向对象设计的思考

python学习(七) 更加抽象的更多相关文章

  1. python学习笔记3_抽象

    这一步的学习四个知识点,如何将语句组织成函数,参数,作用域(scope),和递归 一.函数 1.抽象和结构 抽象可以节省很多的工作量,实际上它的作用更大,它是使得计算机程序让人读懂的关键(这也是最基本 ...

  2. guxh的python笔记七:抽象基类

    1,鸭子类型和白鹅类型 1.1,白鹅类型 白鹅类型对接口有明确定义,比如不可变序列(Sequence),需要实现__contains__,__iter__,__len__,__getitem__,__ ...

  3. Python学习(七) 流程控制if语句

    在Python中流程控制if语句采用如下格式: if expression : statement elif expression : statement elif expression : stat ...

  4. Python学习七步走

    在周五的下午三点钟(为什么是这个时间?因为事情总会在周五下午三点钟发生),你收到一条通知,客户发现你的软件出现一个错误.在有了初步的怀疑后,你联系运维,查看你的软件日志以了解发生了什么,因为你记得收到 ...

  5. Python学习笔记之抽象

    一.创建函数 >>> import math >>> x=1 >>> y=math.sqrt >>> callable(x) # ...

  6. Python学习笔记(七)

    Python学习笔记(七): 深浅拷贝 Set-集合 函数 1. 深浅拷贝 1. 浅拷贝-多层嵌套只拷贝第一层 a = [[1,2],3,4] b = a.copy() print(b) # 结果:[ ...

  7. 【python学习笔记】7.更加抽象

    [python学习笔记]7.更加抽象 类的定义就是执行代码块 在内存保存一个原始实例,可以通过类名来访问 类的实例化,是创建一个原始实例的副本, 并且所有成员变量与原始实例绑定 通过修改实例变量,可以 ...

  8. 【python学习笔记】6.抽象

    [python学习笔记]6.抽象 创建函数: 使用def语句定义函数,不用声明参数类型,和返回值类型 def function_name(param1, param2): 'this is docum ...

  9. python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍

    目录 python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍 一丶元祖 1.元祖简介 2.元祖变量的定义 3.元祖变量的常用操作. 4.元祖的遍历 5.元祖的应用场景 p ...

  10. python学习笔记4_类和更抽象

    python学习笔记4_类和更抽象 一.对象 class 对象主要有三个特性,继承.封装.多态.python的核心. 1.多态.封装.继承 多态,就算不知道变量所引用的类型,还是可以操作对象,根据类型 ...

随机推荐

  1. linux的文件

    今日感慨:linux根目录下的文件夹含义 bin的知识,二进制文件,其用途依系统或应用而定 . 也就是说,一般来讲是机器代码,汇编语言编译后的结果,(DOS下汇编语言编译后与.com文件相类似),用d ...

  2. Firefox 下载、附加组件、Flash插件、缓存位置(附加Chrome下载和Opera下载)

    Firefox 下载的FTP页面: http://ftp.mozilla.org/pub/firefox/releases/ Firefox下载官方页面: https://www.mozilla.or ...

  3. 30-THREE.JS 圆环

    <!DOCTYPE html> <html> <head> <title>Example 05.03 - Basic 2D geometries - R ...

  4. 【spark】连接Hbase

    0.我们有这样一个表,表名为Student 1.在Hbase中创建一个表 表明为student,列族为info 2.插入数据 我们这里采用put来插入数据 格式如下   put  ‘表命’,‘行键’, ...

  5. MVC框架中的值提供机制(一)

    在MVC框架中action方法中的Model数据的绑定的来源有很多个,可能是http请求中的get参数或是post提交的表单数据,会是json字符串或是路径中的相关数据;MVC框架中针对这些不同的数据 ...

  6. 【51nod-1605】棋盘问题

    上帝创造了一个n*m棋盘,每一个格子都只有可能是黑色或者白色的. 亚当和夏娃在玩一个游戏,每次寻找边长为x的正方形,其中每个格子必须为黑色,然后将这些格子染白. 如果谁不能操作了,那么那个人就输了. ...

  7. HDU 3452 Bonsai(树形dp)

    Bonsai Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submis ...

  8. Java8_01_新特性概述

    一.前言 二.

  9. JavaScript test//href

    目录 JavaScript test//href JavaScript test//href href 其实这个问题并不属于这里的.但是呢,由于一天晚上因为这个问题扰我"一夜不能眠" ...

  10. Bellman-Ford算法——解决负权边

    Dijkstra算法虽然好,但是它不能解决带有负权边(边的权值为负数)的图. 接下来学习一种无论在思想上还是在代码实现上都可以称为完美的最短路径算法:Bellman-Ford算法. Bellman-F ...