1.类的定义
class ClassName:
"类文档,可以通过类名.__doc__访问"
def f(self):#self为每个类函数的必要的一个参数,可以通过它来访问当前实例
return self.content
def __init__(self,word=''):#构造函数
#构造函数,可以初始化变量,可以有参数"
self.content=word
self.__name=word #私有变量,以"__"开头,不以"__
|
创建类实例
x=ClassName("good")
2.类继承
lass ():
pass
如果基类定义在另一个模块中, 要写成 modname. 。派生类的函数会覆盖基类的同名函数 ,如果想扩充而不是改写基类的函数,可以这样调用基类函数
.methodname(self,arguments) 注意:该基类要在当前全局域或被导入
class A:
def hi(self):
print "A"
class B(A):
def hi(self):
A.hi(self)
#super(B).hi() #通过super关键字可以获得当前类的基类
print "B"
B().hi()
output:
A
B |
3.多重继承
class DerivedClassName(Base1,Base2,Base3): pass
对于该类函数的解析规则是深度优先,先是Base1,然后是Base1的基类,诸如此类.
class A:
def hi(self):
print "A"
class B:
def hi(self):
print "B"
class C(A,B):
pass
C().hi()
output:
A
|
4.常用的操作符重载
__str__/__unicode
class A:
def __str__(self):
return "A"
def __unicode__(self):
return "uA"
print A()
print unicode(A())
output:
A
uA
|
cmp
( self, other) 用来简化比较函数的定义 self < other返回负数,相等时返回0,self>other时返回正数
class A:
def __init__(self,i):
self.i=i
def __cmp__(self,other):
return self.i-other.i
print A(1)>A(2)
output:
False
|
__iter__
for ... in 循环即就是通过这个函数遍历当前容器的对象实例 可配合yield方便的编写这个函数
class A:
def __init__(self,n):
self.n=n
def __iter__(self):
n=self.n
while n:
m=n%2
n/=2
yield m #绑定print输出的变量内容
for i in A(5):
print i, #逗号表示不换行
output:
1 0 1
|
type,
返回对象的类型
>>> type("")==str
True
>>> type([])
<type 'list'>
>>> type({})
<type 'dict'>
>>> class A:pass
>>> type(A)
<type 'classobj'>
>>> type(A())
<type 'instance'>
|
getattr:通过类实例和一个字符串动态的调用类函数/属性,hasattr 用来判断实例有无该函数/属性
delattr 用来删除实例的函数/属性
class A:
def name(self):
return "ZSP"
def hello(self):
return "nice to meet me ."
def say(obj,attr):
print getattr(obj,attr)()
a=A()
say(a,"name")
say(a,"hello")
output:
ZSP
nice to meet me .
|
property,
通过值的方式调用实例无参函数
class A(object):
def __init__(self): self._x = None
def getx(self): return self._x
def setx(self, value): self._x = value
def delx(self): self._x=None
x = property(getx, setx, delx, "I'm the 'x' property.")
a=A()
print a.x
a.x="ZSP"
print a.x
del a.x
print a.x
output:
None
ZSP
None
可以方便的定义一个只读属性
class A(object):
@property
def x(self): return "Property"
>>>a=A()
>>>print a.x
Property
>>>a.x="ZSP" #只读属性,不能改
|
isinstance(object,classinfo),
判断一个对象是否是一个类的实例
>>>class A:pass
>>>class B:pass
>>>a=A()
>>>isinstance(a,A)
True
>>>isinstance(a,B)
False
|
其它资料
阅读(1295) | 评论(1) | 转发(0) |