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从往上下了一个 ...
随机推荐
- BBS项目总结
数据库(Oracle): BBSUserid:主键username:用户名password:密码pic:头像 blobpagenum:每个人分页喜好数量,每页显示多少行 Article :ID:主键, ...
- 小程序setData,视图层没有跟新
如果你完全符合微信介绍的setData使用说明的情况下,发现视图层没有更新,你可以看看我的这种情况. 使用setData的时候,修改的是data中一个对象的值,然后这个对象里面第一层不能含有 numb ...
- IDEA下MyBatis错误总结
1. Pom.xml配置 语法顺序 <properties resource="config.properties"> </properties> < ...
- QTabelwidget 添加复选框
QString sceneName = QString("%1(%2)").arg(sisList[i].sceneName).arg(sisList[i].sceneNo); Q ...
- easybcd 支持 windows 10 和 ubuntu 14.04 双系统启动
家里计算机系统 windows 10 全新安装. 原本是双系统的,还有一个ubuntu. windows 10 安装以后,恢复ubuntu就是问题了. (事后经验:请不要立刻安装bcd修改工具) 最初 ...
- ListView中含有EditText时候--要命的焦点问题迎刃而解
最近做项目的时候遇到了一个问题,就是在ListView的item上面含有一个EditText,要求是这样: 1当点击item的时候,item可以点击; 2当点击EditText的时候EditText也 ...
- zabbix设置多个收件人
1.建群组 2.添加群组权限 3.添加用户,归属到上面新建的组 4.动作里发送消息给新建的组 5.这样设置后,管理员账号不用设置收件媒介
- pooling需要注意的一个地方
max pooling 在不同的 depth 上是分开执行的,且不需要参数控制.也就是说,pooling之后,feature map的维度不会改变
- 阿里云ECS搭建node/mongodb开发环境及部署
一.前端的er在window或mac上安装开发环境应该再清楚不过了.但在服务器上安装还是有点不同的,毕竟是 centOS,从此不得不走上用命令操作…… 二.前期准备 1.首先,我们去阿里云网站阿里云服 ...
- Apache web服务
1.apache 1> 世界上使用率最高的网站服务器,最高时可达70%:官方网站:apache.org 2> http 超文本协议 HTML超文本标记语言 3> URL 统一资源定位 ...