您所在的位置:小祥子 » 编程 » Python » 正文

Python学习 Day 7 面向对象 类和实例 访问限制

时间:2015-04-27 编辑:jpld 来源:本站整理

面向对象编程

面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。

面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。

而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。

在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。

类和实例

类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。

定义类是通过class关键字

class Student(object):# 定义类是通过class关键字

pass

>>> bart = Student()

>>> bart

<__main__.Student object at 0x10a67a590>

>>> Student

<class '__main__.Student'>

>>>class Student(object):

def__init__(self, name, score):

self.name = name

self.score = score

和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self,并且,调用时,不用传递该参数。

数据封装

>>> defprint_score(std):
...     print'%s: %s' % (std.name, std.score)
...
>>> print_score(bart)
Bart Simpson: 59
classStudent(object):
	
    def__init__(self, name, score):
        self.name = name
        self.score = score
	
    defprint_score(self):
        print'%s: %s' % (self.name, self.score)

类是创建实例的模板,而实例则是一个一个具体的对象,各个实例拥有的数据都互相独立,互不影响;

方法就是与实例绑定的函数,和普通函数不同,方法可以直接访问实例的数据;

通过在实例上调用方法,我们就直接操作了对象内部的数据,但无需知道方法内部的实现细节。

和静态语言不同,Python允许对实例变量绑定任何数据,也就是说,对于两个实例变量,虽然它们都是同一个类的不同实例,但拥有的变量名称都可能不同

访问限制

在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问

classStudent(object):

def__init__(self, name, score):

self.__name = name

self.__score = score

defprint_score(self):

print'%s: %s' % (self.__name, self.__score)

JS7c9pcxNeeKU0zq8TEgvw4J3EiczPnHX3JCqRe1pvFe0VHKph4SV6k6DR1h909nau18CYWO4NK8RlZVXw/640?wxfmt=jpeg&tp=webp&wxfrom=5" data-s="300,640" data-type="jpeg" data-src="http://mmbiz.qpic.cn/mmbiz/njjfaJS7c9pcxNeeKU0zq8TEgvw4J3EiczPnHX3JCqRe1pvFe0VHKph4SV6k6DR1h909nau18CYWO4NK8RlZVXw/0?wxfmt=jpeg" data-ratio="1" data-w="262" border="0" onload="return imgzoom(this,600);"/>