MyException - 我的异常网
当前位置:我的异常网» Perl/Python » python 类跟实例

python 类跟实例

www.MyException.Cn  网友分享于:2013-09-10  浏览:0次
python 类和实例
class 定义如下:
class ClassName(ParentClass):
    """class  docstring"""
    def   method(self):
        return
在python 中 定义类是通过class关键字,class后面接类名,类名通常是大写开头的单词
括号中的ParentClass用来表示继承的父类,如果没有合适的继承类,就是用object类,这是所有的类最终都会继承的类
""""""中的内容表示docstring,可以省省略
定义方法与函数定义十分类似,不过多了一个self参数表示这个对象本身
class  Student(object):
    pass

 定义好了student类,就可以根据Student类创建出Student的实例,创建实例通过类名+'()'实现的:

bart=Student()
print  bart
# <__main__.Student object at 0x02497B90>
print  Student
# <class '__main__.Student'>

 可以看到变量bart指向的就是一个Student的object,后面的0x02497B90是内存地址
 可以自由的给一个实例变量绑定属性

bart.name='Bart Simpson'
print  bart.name     #  ==>>Bart Simpson

 由于类可以起到模板的作用,因此在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去
 通过定义一个特殊的__init__方法,在创建实例的时候就把name,score等属性绑定上去:

class   Student(object):
    def   __init__(self,name,score):
        self.name=name
        self.score=score

   __init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__init__方法内部就可以把各种属性绑定到self,因为self就指向创建的实例本身。
有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传,python解释器自己会把实例变量传进去:

bart=Student('Bart Simpson',59)
print bart.name    #==>Bart Simpson
print  bart.score   #==>59

 和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self,并且调用时不用传递该参数,除此之外,类的方法和普通函数没有什么区别

 数据封装

面向对象编程的一个重要的特别就是数据封装。在上面的student类中,每个实例就拥有各自的name和score这些数据。我们可以通过函数来访问这些数据
def   print_score(std):
    print  '%s:%s' %(std.name,std.score)

print_score(bart)
# Bart Simpson:59
但是既然student实例本身就拥有这些数据,要访问这些数据,就没有必要从外面的函数去访问,可以直接在student类的内部定义访问数据的函数,
这样就把数据给封装起来了,这些封装数据的函数是和student类本身关联起来的,我们称之为类的方法
class   Student(object):
    def   __init__(self,name,score):
        self.name=name
        self.score=score

    def  print_score(self):
        print  '%s:%s' %(self.name,self.score)
要定义一个方法,除了第一个参数是self外,其他和普通函数一样。要调用一个方法只需要在实例变量上直接调用,除了self不用传递,其他参数正常传入: 
bart.print_score()
# Bart Simpson: 59

 这样一来,我们从外部看Student类,就只需要知道,创建实例需要给出name和score,而如何打印,
都是在Student类的内部定义的,这些数据和逻辑被“封装”起来了,调用很容易,但却不用知道内部实现的细节。

封装的另一个好处是可以给Student类增加新的方法,比如get_grade:

class Student(object):
    ...

    def get_grade(self):
        if self.score >= 90:
            return 'A'
        elif self.score >= 60:
            return 'B'
        else:
            return 'C'

 

 

 

 

 

 

 

文章评论

什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
代码女神横空出世
代码女神横空出世
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
为什么程序员都是夜猫子
为什么程序员都是夜猫子
旅行,写作,编程
旅行,写作,编程
程序员的鄙视链
程序员的鄙视链
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
编程语言是女人
编程语言是女人
程序员必看的十大电影
程序员必看的十大电影
如何成为一名黑客
如何成为一名黑客
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
程序员应该关注的一些事儿
程序员应该关注的一些事儿
漫画:程序员的工作
漫画:程序员的工作
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
每天工作4小时的程序员
每天工作4小时的程序员
程序员和编码员之间的区别
程序员和编码员之间的区别
我是如何打败拖延症的
我是如何打败拖延症的
那些争议最大的编程观点
那些争议最大的编程观点
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
鲜为人知的编程真相
鲜为人知的编程真相
 程序员的样子
程序员的样子
总结2014中国互联网十大段子
总结2014中国互联网十大段子
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
我的丈夫是个程序员
我的丈夫是个程序员
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
10个调试和排错的小建议
10个调试和排错的小建议
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
程序员都该阅读的书
程序员都该阅读的书
老程序员的下场
老程序员的下场
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有