下面进入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)创建使用自己的类

 __metaclass__=type

 class Person:
def setName(self,name):#这个self变量作为第一个参数传入函数,来绑定对象
self.name=name
def getname(self):
return self.name
def greet(self):
print("hello word my name is %s" % self.name) #类的使用
>>> foo=Person()#实例化一个对象
>>> foo.setName("yanliang")#调用对象的方法
>>> foo.getname()
'yanliang'
>>> foo.greet()
hello word my name is yanliang #特性是可以在外部访问的(这里和C++的私有成员有点区别)
>>> foo.name='yan'
>>> foo.getname()
'yan'

(2)特性,函数,方法

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

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

 #__metaclass__=type
class class1:
def method(self):
print("yanliang") def func():
print("yan") >>> a=class1()
>>> a.method()
yanliang
>>> a.method=func#可以将特性绑定到普通的函数身上
>>> a.method()
yan
 class bird:
sing="yanliang"
def singing(self):
print(self.sing) #调用上面类的函数
>>> bird1=bird()
>>> bird1.singing()
yanliang #可以将对象的变量赋值给别人
>>> a=bird1.sing
>>> a
'yanliang' #可以将对象的方法绑定到一个变量上去(还需要对self参数的访问)
>>> birdsing=bird1.singing
>>> birdsing()
yanliang

对象内部成员的私有化

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

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

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

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

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

 class class1:
members=0;
def init(self):
class1.members+=1 >>> a=class1()
>>> a.init()
>>> class1.members#这里有点类似于C++的静态成员变量
1
>>> b=class1()
>>> b.init()
>>> class1.members
2 >>> a.members="yanliang"#这里类似于C++一般的数据成员变量
>>> a.members
'yanliang'
>>> class1.members
2

超类(基类)

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

 class class1:
def init(self):
self.num="yan"
def print1(self):#子类直接继承基类的print1函数,就不需要再写了
print(self.num) class class2(class1):
def init(self):#这里的子类class2会重写超类的init函数
self.num="yanliang" >>> a=class1()
>>> a.init()
>>> a.print1()
yan >>> b=class2()
>>> b.init()
>>> b.print1()
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. hashlib加密模块详解

    1.hash是把任意长度的消息压缩到某一固定长度的数值的函数. hash主要用于安全加密,把一些不同长度的信息转化成杂乱的128位编码里,叫做hash值. hash就是把内容和内容地址之间找到一种映射 ...

  2. Windows 2016 安装Sharepoint 2016 预装组件失败

    Windows 2016 安装Sharepoint 2016 预装组件失败 日志如下: -- :: - Request for install time of Web 服务器(IIS)角色 -- :: ...

  3. js单线程和js异步操作的几种方法

    一.为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事. JavaScript的单线程,与它的用途有关.作为浏览器脚本语言,JavaS ...

  4. 最新精品 强势来袭 XP,32/64位Win7,32/64位Win8,32/64位Win10系统【国庆版版】

    本系统是10月最新完整版本的Windows10 安装版镜像,Win10正式版,更新了重要补丁,提升应用加载速度,微软和百度今天宣布达成合作,百度成为Win10 Edge浏览器中国默认主页和搜索引擎,系 ...

  5. SQLite – 删除表

    SQLite -删除表 SQLite DROP TABLE语句用于删除一个表定义和所有相关的数据,索引.触发器.约束和规范许可表. 你使用这个命令时必须小心,因为一旦一个表被删除然后表中所有可用的信息 ...

  6. TensorFlow低阶API(四)—— 图和会话

    简介 TensorFlow使用数据流图将计算表示为独立的指令之间的依赖关系.这可生成低级别的编程模型,在该模型中,您首先定义数据流图,然后创建TensorFlow会话,以便在一组本地和远程设备上运行图 ...

  7. 20针,14针,10针JTAG引脚对应关系

    J-Link是常用的调试工具,用于程序的调试和下载.常用的J-Link的的接口有很多种,常见的有20针,14针和10针. J-Link可以使用JTAG方式下载调试程序,也可以使用SWD方式.从引脚方面 ...

  8. 命令终端执行python

    windows进入cmd 1.进入cmd窗口,找到存放py文件的地址(如E:\learn_mock) 2.退出python,输入exit() linux下一样

  9. Low Speed High Torque Hydraulic Motor: Motion Performance

    Crank connecting rod type low speed high torque hydraulic motor is used earlier, which is called Sta ...

  10. Java集合系列之HashMap

    概要 第1部分 HashMap介绍 HashMap简介 HashMap 是一个散列表,它存储的内容是键值对(key-value)映射.HashMap 继承于AbstractMap,实现了Map.Clo ...