下面进入Python的面向对象:

对象的魔力:

多态:---可以对不同类的对象使用同样的操作

封装:---对外部隐藏对象内部的工作方式

继承:---以普通的类为基础建立专门的类对象

(1)多态:

isinstance(...)
isinstance(object, class-or-type-or-tuple) -> bool   检查object的类型

isinstance(object, tuple) 检查是否为元组

绑定到对象上的函数称为方法   例如>>> [1,2,'a','1','a'].count('a')  2

repr(object) -> string   一种多态的方式,无论什么转化为字符串

(2)封装

(3)继承

7.2 类和类型

(1)创建使用自己的类

  1. __metaclass__=type
  2.  
  3. class Person:
  4. def setName(self,name):#这个self变量作为第一个参数传入函数,来绑定对象
  5. self.name=name
  6. def getname(self):
  7. return self.name
  8. def greet(self):
  9. print("hello word my name is %s" % self.name)
  10.  
  11. #类的使用
  12. >>> foo=Person()#实例化一个对象
  13. >>> foo.setName("yanliang")#调用对象的方法
  14. >>> foo.getname()
  15. 'yanliang'
  16. >>> foo.greet()
  17. hello word my name is yanliang
  18.  
  19. #特性是可以在外部访问的(这里和C++的私有成员有点区别)
  20. >>> foo.name='yan'
  21. >>> foo.getname()
  22. 'yan'

(2)特性,函数,方法

1. 前面的self参数正是方法和函数的区别了,方法可以将它的的一个参数绑定到它的实例上,而函数没有

但是这个参数也是可以不用提供的,就没有了self参数了

  1. #__metaclass__=type
  2. class class1:
  3. def method(self):
  4. print("yanliang")
  5.  
  6. def func():
  7. print("yan")
  8.  
  9. >>> a=class1()
  10. >>> a.method()
  11. yanliang
  12. >>> a.method=func#可以将特性绑定到普通的函数身上
  13. >>> a.method()
  14. yan
  1. class bird:
  2. sing="yanliang"
  3. def singing(self):
  4. print(self.sing)
  5.  
  6. #调用上面类的函数
  7. >>> bird1=bird()
  8. >>> bird1.singing()
  9. yanliang
  10.  
  11. #可以将对象的变量赋值给别人
  12. >>> a=bird1.sing
  13. >>> a
  14. 'yanliang'
  15.  
  16. #可以将对象的方法绑定到一个变量上去(还需要对self参数的访问)
  17. >>> birdsing=bird1.singing
  18. >>> birdsing()
  19. yanliang

对象内部成员的私有化

Python不直接支持私有的方式:

让特性或者方法变成私有只要在它的前面加上双下划线就可以了。

  1. class pclass:
  2. __val1="yanliang"
  3.  
  4. def __fun1(self):
  5. print(self.__val1)
  6.  
  7. def fun2(self):
  8. self.__fun1()
  9. #当调用这个类对象时,外部对__val1特性和__fun1方法是没有权利的

类的定义其实就是只是在执行代码块

类里面的所有实例访问的变量和实例自己所拥有的变量:

  1. class class1:
  2. members=0;
  3. def init(self):
  4. class1.members+=1
  5.  
  6. >>> a=class1()
  7. >>> a.init()
  8. >>> class1.members#这里有点类似于C++的静态成员变量
  9. 1
  10. >>> b=class1()
  11. >>> b.init()
  12. >>> class1.members
  13. 2
  14.  
  15. >>> a.members="yanliang"#这里类似于C++一般的数据成员变量
  16. >>> a.members
  17. 'yanliang'
  18. >>> class1.members
  19. 2

超类(基类)

在定义时在类名后面加一个括号,括号里面为超类。

  1. class class1:
  2. def init(self):
  3. self.num="yan"
  4. def print1(self):#子类直接继承基类的print1函数,就不需要再写了
  5. print(self.num)
  6.  
  7. class class2(class1):
  8. def init(self):#这里的子类class2会重写超类的init函数
  9. self.num="yanliang"
  10.  
  11. >>> a=class1()
  12. >>> a.init()
  13. >>> a.print1()
  14. yan
  15.  
  16. >>> b=class2()
  17. >>> b.init()
  18. >>> b.print1()
  19. yanliang

可以采用内建的>>> issubclass(class2,class1) 函数来判断一个类是否是另外一个类的子类

可以采用>>> class2.__bases__来找到已知类的所有基类(<class '__main__.class1'>,)

可以采用>>> isinstance(a,class1)来判断一个对象是否是一个类的实例

Python基础教程笔记——第7章:更加抽象(类)的更多相关文章

  1. Python基础教程笔记——第6章:抽象(函数)

    (1)计算裴波那契数列: fbis=[0,1] num=int(input("please input the number")) for i in range(num-2): f ...

  2. Python基础教程笔记——第4章:字典

    字典 字典是Python唯一内建的数学映射类型,字典中的值没有特殊的顺序,键可以是数字,字符串,甚至是元组 字典的创建: 字典由键值对构成,字典中键是唯一的,而值不唯一.>>> a_ ...

  3. Python基础教程笔记——第2章:列表和元组

    python shell 里重复上一次的命令:Alt+p 2.3 列表:Python的苦力 (1)list函数 (2)列表赋值,不蹦蹦为一个元素不存在的位置赋值 (3)删除元素,del name[1] ...

  4. Python基础教程笔记——第1章

    1.8 函数 pow(x,y) x^y abs(x)          取数的绝对值 round(x)   会把浮点数四舍五入为最接近的整数 floor(x)     向下取整的函数,但是需要先imp ...

  5. Python基础教程笔记——第5章:条件,循环和其他语句

    5.1 print和import的更多信息 1. print()3.0之后print不再是语句,而是函数, >>> print('udg',12,13)   udg 12 13 &g ...

  6. Python基础教程笔记——第3章:使用字符串

    字符串是不可修改的,标准序列操作(索引,分片,判断成员资格,求长度,取最大值 最小值)对字符串都是有效的. 格式化字符串,类似于C语言的输出是的感觉. >>> format=&quo ...

  7. 《Python基础教程》第六章:抽象(一)

    用def定义函数 __doc__是函数属性.属性名中的双下划线表示它是个特殊属性

  8. python基础教程笔记—即时标记(详解)

    最近一直在学习python,语法部分差不多看完了,想写一写python基础教程后面的第一个项目.因为我在网上看到的别人的博客讲解都并不是特别详细,仅仅是贴一下代码,书上内容照搬一下,对于当时刚学习py ...

  9. python基础教程笔记—画幅好画(详解)

    今天写一下基础教程里面的第二个项目,主要使用python来做一个pdf的图,比较简单. 首先我们需要安装用到的模块pip install reportlab即可. 书上是用urlopen从往上下了一个 ...

随机推荐

  1. markdown快捷键(转)

    markdown快捷键 GLYPH NAME COMMAND Command, Cmd, Clover, (formerly) Apple ALT Option, Opt, (Windows) Alt ...

  2. Linux上用mvn安装node.js

    Linux上用mvn安装node.js 上一篇blog简略的讲了ubuntu系统的安装,接下来讲讲Ubuntu上的基于node.js的web开发环境的搭建. Node在快速构建网络服务有着极大的优势, ...

  3. IE8提速经验

    给人写了个web程序,其中detail页要加载不少东西,所以耗时略长.因为bootstrap的原因,我要求用户使用chrome; 而chrome出了名的快,所以也基本没觉得什么. 后来用户因为别的原因 ...

  4. TFS强制删除离职人员签出锁定项的方法(转)

      项目组一哥们走的时候以独占方式迁出了文件,现在其他人都无法修改,管理员似乎也无法将文件解除.经过摸索,找到了一种暴力的方法——直接改TFS数据库.虽然暴力,却能实实在在地解决这个问题. 步骤: 1 ...

  5. 跟随鼠标指针跑的div拖拽效果

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  6. 8.2.6 PEB —— PEB结构值不正确的问题

    书中作者使用 dt _PEB xxxxxx 命令来查看当前进程的PEB结构. 实际操作后PEB结构显示的成员值: 作为进程链表的LDR结构居然没有值,这显然是不正常的,地址也没有输错,问题到底出在哪里 ...

  7. 洛谷 P1454 圣诞夜的极光 == codevs 1293 送给圣诞夜的极光

    题目背景 圣诞夜系列~~ 题目描述 圣诞老人回到了北极圣诞区,已经快到12点了.也就是说极光表演要开始了.这里的极光不是极地特有的自然极光景象.而是圣诞老人主持的人造极光. 轰隆隆……烟花响起(来自中 ...

  8. JavaScript Html2canvas 生成高清图片(移动端模糊问题)

    最近在做一个移动端的项目,简单记录一下该功能. 需求是这样的: 将带有二维码和一些介绍信息 动态生成一张图片 比如说是 生成这样的图片,文字.主图.价格.二维码都是不固定的. 对于这个需求,看见微信上 ...

  9. iview table的render()函数基本的用法

    render:(h,params) => { return h(" 定义的元素 ",{ 元素的性质 }," 元素的内容"/[元素的内容]) }

  10. python3查询Excel中A表在B表没有的数据,并保存到新的Excel,这里用的是“xlrd”和“xlwt”

    import xlrd import xlwt # 打开A表,将A表的数据存放到cols1中,这里打印出来是方便查看测试数据. data1 = xlrd.open_workbook(r'F:\cars ...