下面进入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. ArcGIS Desktop新建postgresql版sde(10.4.1)的连接

    假设连接到的sde数据库是pg数据库,其他参数包括: ip:10.0.0.8 数据库:sde1 用户:sde 密码:sde 打开catalog,新建数据库连接 按如下输入数据库连接参数 红框1是数据库 ...

  2. java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()

    原因:hibernate-jpa-2.0-api-1.0.0.Final.jar.ejb3-persistence.jar中的javax.persistence与javaEE 5 Librares中的 ...

  3. Idea导入tomcat源码

    1.下载资源 下载主要包含两个包,已经编译的包和源码包,如图所示. 链接地址为: http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.93/bin ...

  4. mysql出错排查

    1,例如:Can't connect to local MySQL server through socket '/tmp/mysql-5.5.37.sock' (2) Mysql链接出错,请配置/A ...

  5. vba,自定义公式,农历互转公历,excel ,wps

    'vba 模块内容如下 自定义公式 '公历转农历模块 '原创:互联网 '修正: '// 农历数据定义 // '先以 H2B 函数还原成长度为 18 的字符串,其定义如下: '前12个字节代表1-12月 ...

  6. SQLite -附加数据库

    SQLite -附加数据库 考虑情况下当你有多个数据库可用,您希望使用其中任何一个.SQLite附加DTABASE语句用于选择一个特定的数据库,这个命令之后,所有SQLite语句将执行以下附加数据库. ...

  7. 迅为4412开发平台Zigbee模块在物联网智能家居中的应用

      物联网智能家居的发展物联网随着互联网的发展,可以通过互联网实现物和物的互联,就有了物联网的概念.传统家居电器 有了物联网之后,在家居电器范围中,就是通过物联网技术将家中的各种设备连接到一起,家居中 ...

  8. this.$refs.tabs.activeKey ref就是vue里面的id

    this.$refs.tabs.activeKey ref就是vue里面的id

  9. List<T>排序

    List<Student> studentList = new List<Student>(); Student s = new Student(); s.Name = &qu ...

  10. 浅谈Link-Cut Tree(LCT)

    0XFF 前言&概念 Link-Cut Tree 是一种用来维护动态森林连通性的数据结构,适用于动态树问题.它采用类似树链剖分的轻重边路径剖分,把树边分为实边和虚边,并用 Splay 来维护每 ...