类的定义
Python是面向对象程序设计语言。将多个对象提取相同特征,向上抽取,就得到了类。在类中可以定义类的特性和方法。
创建类
>>> __mataclass__ = type #确定使用新式类
>>> class Person:
def setName(self,name):
self.name = name
def getName(self):
return self.name
def greet(self):
print "Hello ,world! I'm %s." % self.name
>>>
class语句会在函数定义的地方创建自己的命名空间。其中,self参数是对于对象自身的引用。
>>> p1 = Person()
>>> p2 = Person()
>>> p1.setName('Tom')
>>> p2.setName('Ami')
>>> p1.greet()
Hello,world! I'm Tom.
>>> p2.greet()
Hello,world! I'm Ami.
特性、函数和方法
self参数事实上正是方法和函数的区别。方法(刚专业一点可以成为绑定方法)将他们的第一个参数绑定到所属的实例上,因此不需显示提供该参数。
特性可以理解为在类中定义的变量。
私有化
Python并没有真正的私有化支持。若要实现隐藏特性或者方法,使该特性和方法不可以在类外部直接调用。可以在定义特性和方法时在名字前加上双下划线。
>>> class Secretive:
def __inaccessible(self):
print "Bet you can't see me..."
def accessible(self):
print "The secret message is:"
self.__inaccessible()
>>> s = Secretive()
>>> s.__inaccessible() #__inaccessible从外界是无法访问的,而在类内部是可以的
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
s.__inaccessible()
AttributeError: Secretive instance has no attribute '__inaccessible'
>>> s.accessible()
The secret message is:
Bet you can't see me...
>>>
但是Python并没有真正的私有化支持,在类的内部定义中,所有以双下划线开始的名字都被”翻译“成前面加上单下划线和类名的形式。
>>> s._Secretive__inaccessible()
Bet you can't see me...
>>>
如果不需要使用这种方法但是又想其他对象不要访问内部数据,那么可以使用单下划线。
类的命名空间
面向对象三大特性
封装
封装可以使类只对外提供一些功能接口,而不用提供实现功能的细节。这对程序的安全和使用都是有很大影响的。
多态
多态意味着可以对不同类的对象使用同样的操作。
继承
以通用的类为基础建立专门的类对象。