您的位置:首页 > 编程语言 > Python开发

python学习笔记(三)之面向对象编程

2014-07-31 20:58 411 查看
面向对象编程无需赘述,主要是三大点:封装(encapsulation)、继承(inheritance)、多态(polymorphism)

一、类的定义、继承和实例:

python中的类也使用class类定义,最简单的一个类例如:
Class a:
def __init__(self):#相当于java中的构造函数
self.m=1
而对于一个更复杂些的类的定义和实现,即可看出python的类的特点:
__author__ = 'wadetang'
# -*- coding: UTF-8 -*-
class a:
def __init__(self):
self.m=1      #初始化定义

class b(a):#由a类继承而来
def __init__(self):
a.__init__(self)
self.n=2

def sum(self):#self永远是第一个参数,表示创建的实例本身
print self.m+self.n

c=b() #实例化
c.sum()
同样,类也可以使用三引号来进行文档说明。

二、类的私有函数:

如果要让类内部的函数限制访问,即不能被外部访问,可以在函数的名称前加上双下划线__,修改一下上面的代码做说明:
# -*- coding: UTF-8 -*-
class a:
def __init__(self):
self.m=1      #初始化定义

class b(a):#由a类继承而来
def __init__(self):
a.__init__(self)
self.n=2

def sum(self):#self永远是第一个参数,表示创建的实例本身
print self.m+self.n

def __private(self):
print "it is private"

c=b() #实例化
c.sum()
c.__private()
输出为:
Traceback (most recent call last):
File "D:/Workspaces/Pythonworkspace/class01.py", line 20, in <module>
c.__private()
AttributeError: b instance has no attribute '__private'
3
报错,即不能被访问。这样很大程度提升了代码的健壮性。

但是,对于下面这样的类:
__author__ = 'wadetamg'
# -*- coding: UTF-8 -*-
class Student():
def __init__(self,name,score):
self.name=name
self.score=score
我们要专门访问name和score又怎么办?可以给Student增加函数来实现:
class Student():
def __init__(self,name,score):
self.__name=name
self.__score=score

def get_name(self):
return self.__name
def get_score(self):
return self.__score

xiaoming=Student("xiaoming",98)
print xiaoming.get_name()
print xiaoming.get_score()
我们还要可以修改score怎么办呢?可以这样:
__author__ = 'wadetamg'
# -*- coding: UTF-8 -*-
class Student():
def __init__(self,name,score):
self.__name=name
self.__score=score

def get_name(self):
return self.__name
def get_score(self):
return self.__score
def set_score(self,score):
self.__score=score
return self.__score

xiaoming=Student("xiaoming",98)
print xiaoming.get_name()
print xiaoming.get_score()
print xiaoming.set_score(100)
双下划线开头的实例变量是不是一定不能从外部访问呢?其实也不是。不能直接访问__name是因为Python解释器对外把__name变量改成了_Student__name,所以,仍然可以通过_Student__name来访问__name变量。

面向对象只是简单介绍python的不同之处,要灵活运用python简约的特点,具体的其他更复杂的实现,还是在实际项目中接触最有效。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: