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 一些关于面向对象设计的思考

最新文章

  1. MyBatis5:MyBatis集成Spring事物管理(上篇)
  2. mysql数据库史上最详细起步教程(1)
  3. linux下编译安装vim7.4并安装clang_complete插件
  4. Spring TestContext测试框架搭建
  5. Divide Two Integers leetcode
  6. oracle 中v$sqlarea,v$sql,v$session,gv$session,远程连接等问题
  7. .NET中TextBox控件设置ReadOnly=true后台取不到值三种解决方法
  8. IOS成长之路-Nsstring中搜索方法rangeOfString
  9. "Classifying plankton with deep neural networks" notes
  10. nginx根据条件跳转+跳转规则
  11. CSS border三角、圆角图形生成技术简介
  12. MongoDB基础教程系列--第五篇 MongoDB 映射与限制记录
  13. C语言——第二次作业(2)
  14. EOS之hello智能合约解析
  15. python爬虫之xpath的基本使用
  16. 【译】REM vs EM - 世纪之争
  17. CAD版本 注册表信息
  18. 数据结构HashMap(Android SparseArray 和ArrayMap)
  19. MySQL参数:innodb_flush_log_at_trx_commit 和 sync_binlog
  20. leetcode输入输出加速

热门文章

  1. activity启动模式之singleTop
  2. 设置 Mysql中的datetime的默认值
  3. 为什么font-size推荐使用具体数值?
  4. react 总结
  5. lftp使用
  6. 24-THREE.JS 镜面高光材质
  7. TCP与UDP(实时通讯)
  8. brew: Nginx https config
  9. H264的nalu type有哪些?
  10. css选择器的特殊性值