class abs:
def abs(self):
raise NotImplementedError
类本身就是一个对象,具有独立命名空间。
class A:
count = 0
alive = 0
def __init__(self): # 创建时调用
print "this is first called"
self.__class__.count = self.__class__.count+1
def __del__(self): # 删除对象时调用
print "del is called"
def __repr__(self): # 使用repr()函数调用时,返回和eval()兼容对象字符串表达式,用于重建对象,如>>> a=A() >>> repr(a) >>> eval(repr(a))
return "A()"
def __cmp__(self,other): # 比较操作符,和other比较,0相等,1大于,-1小于
if other > 0 : return 1;
else if other < 0 : return -1;
else : return 0
def __nozero__(self): # 定义对象逻辑,返回0表示对象逻辑假,返回1表示逻辑真
if self.alive==0 : return 0
else : return 1
def __len__(self): # 在内置函数len调用对象时,被调用,返回obj长度,如没定义此函数,调用len(obj)会导致异常
return 0
def __getitem__(self,key): # self[key]模拟列表、词典、元组等数据结构
if key == "G" : return "girl"
elif key == "B" : return "boy"
else : return "unknown"
def __str__(self): #
return "ok, this class A"
def sayHelloWorld(self):
print "Hello world!"
类内部定义的方法,至少包含一个self参数,类似C++中的this。规则:如果从类内部调用方法则一定要包括self作为第一个参数;如调用对象的方法,则直接调用。若obj是类A的一个实例,sayHelloWorld(self)是类A的一个方法,则obj.sayHelloWorld()和A.sayHelloWorld(obj)是一致的。解释:类提供一个建立一个独立name space的机制,每一个实例都有自己独立的name space。在类的方法中,self在方法的local name space中,指向类的实例。当obj=A()时,创建实例,并有自己独立的name space,这个name space 是 A 的name space的一个拷贝(类的实例的name space和类的name space是完全独立的)。self代表实例。每个实例中的name space中都有一个__class__的name,用来指向创建该实例的类对象。例如:obj = A()
obj.sayHelloWorld()
A.sayHelloWorld(obj)
类建立一个独立的name space。任何内部变量都是类的属性。
属性可随时建立,随时删除。如obj无a的属性,则任何地方可用obj.a=1创建一个新的属性。类的方法中self.a=1或外部使用obj.a=1。
即使同一个类的两个不同实例也可有不同属性,可用del删除实例的属性。