您的位置:首页 > 移动开发 > Objective-C

Python学习系列之Object and Object-Orientation

2006-08-01 21:08 666 查看
Object and Object-Orientation
1. Python中,引入一个module/unction的方法有两种,其格式为:
import module
from module import item
这两种方法其本相同,其不同之处在于from module import item这种方式直接将item引入到当前的namespace,这样一来用户便可直接引用item而不需要透过module name来引用。那么,什么情况下使用哪种方法好呢?一般来说,你想偷偷懒,不想多敲键盘,就用from module import item好啦,这样你便可以直接引用;如果你只想引入module的一些attributes 和function,你也可以使用这种方式;但是如果用户自己的module和待引入的module会存在名字冲突,则需要使用import module这用格式。
2.定义类
在Python中,定义类是简单的,格式如下
class ClassName(ParentClass):
pass
其中pass用于占位,类似于Java和C中的{}。Python中的类也有类似于C++中构造函数的东东,即__init__。此外,类还有类似于module和function的doc strings
例如,
class FileInfo(UserDict):
“store file metadata”
def __init__(self, filename = None):
UserDict.__init__(self)
Self[“name”] = filename
值得一提的是,类中的每一个函数,包括__init__,self必须作为其第一个参数。当调用父类的函数时,必须包含self参数。当从外部调用类的函数时,不需要指定self参数。__init__并不是必须的,但是如果定义了__init__函数,必须记得调用其父类的__init__函数。
3.类的实例化
在Python中,类的实例化直接调用类来完成,就像调用函数一样。传入的参数跟__init__中定义一致。返回值便是一个对象。例如:
import fileinfo
f = fileinfo.FileInfo(“D://Python24//Script//test.txt”)
f.__class__
f.__doc__
f
类的创建简单,注销更简单,通常不需要刻意的desctroying。实例会根据其作用范围,自动注销。内存泄漏在Python中是十分少见的。Python使用一种叫reference counting的技术,当一个实例的reference counting为0,该实例便会被注销。
4.一个具体类的说明:
在Python的安装路径下,lib中有一个叫UserDict的模块,以其为实例来说说类 的创建、使用吧!
(1) 类的定义:
class UserDict:
def __init__(self, dict = None):
self.data = {
if dict is not None: self.update(dict)

Python中并没有重载的概念,不同的function需要不同的name,不能像C++/Java那样可以实现重载。子类中的__init__函数甚至会覆盖父类的__init__函数。
(2) 函数的定义
def clear(self) : self.data.clear()
def copy(self) :
if self.__class__ is UserDict:
return UserDict(self.data)
import copy
return copy.copy(self)
def keys(self) : return self.data.keys()
def items(self): return self.data.items()
def values(self): return self.data.values()

一些Function也可以直接从内建的数据类型dict来得到。
class FileInfo(dict):
“store file metadata”
def __init__(self, filename = None):
self[“name”] = filename
(3) 一些特别的函数定义
不同于一般函数,特殊的函数不仅是可以直接调用,它还可能被Python在特定的环境下调用。例如__getitme__和__setitem__
def __getitem__(self, key): return self.data[key]
def __setitem__(self, key, item): self.data[key] = item
这些特殊的函数可以在其子类中改写。例如,在FileInfo的子类Mp3FileInfo中改写__setitem__。
def __setitem__(self, key, item):
if key == “name” and item:
self.__parse(item)
FileInfo.__setitme__(self, key, item)
(4) Python中还有一些特殊的函数,如下所示:
def __repr__(self) : return repr(self.data)
def __cmp__(self, dict):
if isinstance(dict, UserDict):
return cmp(self.data, dict.data)
else:
return cmp(self.data, dict)
def __len__(self): return len(self.data)
def __delitem__(self, key): del self.data[key]
(5) 不同于Java/C++,Python中一个函数是private还是public完全由其名字来决定。如果名字是以__开头,则为private function。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: