Python基础教程笔记——第7章:更加抽象(类)
下面进入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章:更加抽象(类)的更多相关文章
- Python基础教程笔记——第6章:抽象(函数)
(1)计算裴波那契数列: fbis=[0,1] num=int(input("please input the number")) for i in range(num-2): f ...
- Python基础教程笔记——第4章:字典
字典 字典是Python唯一内建的数学映射类型,字典中的值没有特殊的顺序,键可以是数字,字符串,甚至是元组 字典的创建: 字典由键值对构成,字典中键是唯一的,而值不唯一.>>> a_ ...
- Python基础教程笔记——第2章:列表和元组
python shell 里重复上一次的命令:Alt+p 2.3 列表:Python的苦力 (1)list函数 (2)列表赋值,不蹦蹦为一个元素不存在的位置赋值 (3)删除元素,del name[1] ...
- Python基础教程笔记——第1章
1.8 函数 pow(x,y) x^y abs(x) 取数的绝对值 round(x) 会把浮点数四舍五入为最接近的整数 floor(x) 向下取整的函数,但是需要先imp ...
- Python基础教程笔记——第5章:条件,循环和其他语句
5.1 print和import的更多信息 1. print()3.0之后print不再是语句,而是函数, >>> print('udg',12,13) udg 12 13 &g ...
- Python基础教程笔记——第3章:使用字符串
字符串是不可修改的,标准序列操作(索引,分片,判断成员资格,求长度,取最大值 最小值)对字符串都是有效的. 格式化字符串,类似于C语言的输出是的感觉. >>> format=&quo ...
- 《Python基础教程》第六章:抽象(一)
用def定义函数 __doc__是函数属性.属性名中的双下划线表示它是个特殊属性
- python基础教程笔记—即时标记(详解)
最近一直在学习python,语法部分差不多看完了,想写一写python基础教程后面的第一个项目.因为我在网上看到的别人的博客讲解都并不是特别详细,仅仅是贴一下代码,书上内容照搬一下,对于当时刚学习py ...
- python基础教程笔记—画幅好画(详解)
今天写一下基础教程里面的第二个项目,主要使用python来做一个pdf的图,比较简单. 首先我们需要安装用到的模块pip install reportlab即可. 书上是用urlopen从往上下了一个 ...
随机推荐
- markdown快捷键(转)
markdown快捷键 GLYPH NAME COMMAND Command, Cmd, Clover, (formerly) Apple ALT Option, Opt, (Windows) Alt ...
- Linux上用mvn安装node.js
Linux上用mvn安装node.js 上一篇blog简略的讲了ubuntu系统的安装,接下来讲讲Ubuntu上的基于node.js的web开发环境的搭建. Node在快速构建网络服务有着极大的优势, ...
- IE8提速经验
给人写了个web程序,其中detail页要加载不少东西,所以耗时略长.因为bootstrap的原因,我要求用户使用chrome; 而chrome出了名的快,所以也基本没觉得什么. 后来用户因为别的原因 ...
- TFS强制删除离职人员签出锁定项的方法(转)
项目组一哥们走的时候以独占方式迁出了文件,现在其他人都无法修改,管理员似乎也无法将文件解除.经过摸索,找到了一种暴力的方法——直接改TFS数据库.虽然暴力,却能实实在在地解决这个问题. 步骤: 1 ...
- 跟随鼠标指针跑的div拖拽效果
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- 8.2.6 PEB —— PEB结构值不正确的问题
书中作者使用 dt _PEB xxxxxx 命令来查看当前进程的PEB结构. 实际操作后PEB结构显示的成员值: 作为进程链表的LDR结构居然没有值,这显然是不正常的,地址也没有输错,问题到底出在哪里 ...
- 洛谷 P1454 圣诞夜的极光 == codevs 1293 送给圣诞夜的极光
题目背景 圣诞夜系列~~ 题目描述 圣诞老人回到了北极圣诞区,已经快到12点了.也就是说极光表演要开始了.这里的极光不是极地特有的自然极光景象.而是圣诞老人主持的人造极光. 轰隆隆……烟花响起(来自中 ...
- JavaScript Html2canvas 生成高清图片(移动端模糊问题)
最近在做一个移动端的项目,简单记录一下该功能. 需求是这样的: 将带有二维码和一些介绍信息 动态生成一张图片 比如说是 生成这样的图片,文字.主图.价格.二维码都是不固定的. 对于这个需求,看见微信上 ...
- iview table的render()函数基本的用法
render:(h,params) => { return h(" 定义的元素 ",{ 元素的性质 }," 元素的内容"/[元素的内容]) }
- python3查询Excel中A表在B表没有的数据,并保存到新的Excel,这里用的是“xlrd”和“xlwt”
import xlrd import xlwt # 打开A表,将A表的数据存放到cols1中,这里打印出来是方便查看测试数据. data1 = xlrd.open_workbook(r'F:\cars ...