免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2533 | 回复: 0
打印 上一主题 下一主题

对象和面向对象 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-02 14:26 |只看该作者 |倒序浏览
使用from module import 导入模块python有两种导入模块的方法。import module, from module import.from module import基本语法from UserDict import UserDict他与import module很类似,但是有一个重要区别:UserDict被直接导入到局部名字空间去了,所以他可以直接使用,而不需要加入文件名的限制.>>> import types>>> types.FunctionType 1     >>> FunctionType       2Traceback (innermost last):File "", line 1, in ?NameError: There is no variable named 'FunctionType'>>> from types import FunctionType 3>>> FunctionType 41 模块不包含方法,只表示每种python对象名字的属性.这个属性必须用模块名types进行限定.2 FunctionType没有存在当前名字空间,只存在于type上下文中.3 这个语法直接从type上下文中将FunctionType属性导入到局部名字空间中.4 现在Function可以直接使用,于type无关.
类的定义python是完全面向对象的,你可以定义自己的类,也可以从自己的或者内置的类继承,然后从你定义的类创建实例。python以保留字class开始,后面跟着类名。
class Loaf:  pass类名第一个字母一般大写。pass相当于C中的{},在类中的所有东西都要缩进,第一条不缩进的不属于这个类。from UserDict import UserDictclass Fileinfo(UserDict):在python中,类的基类只是简单的列在类名后面的小括号里面。所以Fileinfo类是从UserDict中继承来的。python支持多重继承,在类名后面的小括号中,你可以列出你想要的列名,以逗号隔开。python必须调用父类中的合适方法。__init__没有返回值。
class FileInfo(UserDict):   "store file metadata"   def __init__(self, filename=None): self指向新创建的对象,在其他的类方法中,它指向方法被调用的类实例。当定义方法时候你要明确指定self,但是调用时候不用指定。__init__方法可以接受任意数目的参数,就像函数一样,参数可以用缺省值定义。
class FileInfo(UserDict):   "store file metadata"   def __init__(self, filename=None):   UserDict.__init__(self)  1   self["name"] = filename1 一些伪面向对象语言,父类的方法在子类的方法执行之前被自动调用。python不是这样,你必须显示的调用在父类中的合适方法。
了解何时使用self和__init__当定义自己的类方法时,你必须明确将self作为每个方法的第一个参数列出,包括__init__。当从你的类中调用父类时候,你必须包括self参数。当你从外部调用你的类时候,不用对self指定任何值。在python中对类进行实例化华很直接。要对类进行实例化,只要调用类,传入定义在__init__方法中的参数。返回值将是新创建的对象。__init__方法__init__方法是可选的,一旦你定义了就必须记得显示调用父类的__init__方法。无论何时子类想扩展父类的行为,后代方法必须在适当时机,使用适当参数,显式调用父类方法。类的实例化>>> import fileinfo>>> f = fileinfo.FileInfo("/music/_singles/kairo.mp3")>>> f.__class__>>> f.__doc__'store file metadata'>>> f{'name': '/music/_singles/kairo.mp3'}你正在创建FileInfo的实例,并且将新创建的实例赋值给f,你传入了1个参数,他将作为最后在FileInfo中__init__方法中的filename参数。每一个类的实例有一个内置属性,__class__,他是对象的类。
垃圾回收如果说创建一个新的实例是容易的,那么销毁他甚至更容易。当指派给他们的变量超出作用区域时候,他们会自动的释放,内存泄露在python中很少见。
探索UserDict : 一个封装类
专用类方法:__getitem__方法__setitem__方法
高级专用类方法__repr__返回一个对象的字符串表示,在交互式窗口中,当你只敲入变量名,然后按enter,他能显示变量值。__cmp__在比较类实例时候被调用。用于比较。__len__在调用len(instance)时被调用。len是一个内置函数,可以返回一个对象的长度。__delitem__在调用del instance[key]时调用,你可能记得他作为从字典中删除的方法。
类属性介绍class MP3FileInfo(FileInfo):   "store ID3v1.0 MP3 tags"   tagDataMap = {"title" : ( 3, 33, stripnulls),   "artist" : ( 33, 63, stripnulls),   "album" : ( 63, 93, stripnulls),   "year" : ( 93, 97, stripnulls),   "comment" : ( 97, 126, stripnulls),   "genre" : (127, 128, ord)}>>> import fileinfo>>> fileinfo.MP3FileInfo>>> fileinfo.MP3FileInfo.tagDataMap{'title': (3, 33, ),'genre': (127, 128, ),'artist': (33, 63, ),'year': (93, 97, ),'comment': (97, 126, ),'album': (63, 93, )}
私有函数私有函数不可以从他们的模块外面被调用。私有类方法不能够从他们的类外面被调用。私有属性不能够从他们的类外面被访问。如果一个python函数,类方法,或属性的名字以两个下划线开始(但不是结束),他是似有的;其他所有的都是公有的。python没有类方法保护的概念(只能用于他们自己的类和子类中)。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/103763/showart_2109337.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP