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

 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 
10 >>> a=class1()
11 >>> a.method()
12 yanliang
13 >>> a.method=func#可以将特性绑定到普通的函数身上
14 >>> a.method()
15 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)来判断一个对象是否是一个类的实例

 

posted @ 2015-08-08 15:55  弱水三千12138  阅读(199)  评论(0编辑  收藏  举报