Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1446215
  • 博文数量: 239
  • 博客积分: 5909
  • 博客等级: 大校
  • 技术积分: 2715
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-24 20:19
文章分类

全部博文(239)

文章存档

2014年(4)

2013年(22)

2012年(140)

2011年(14)

2010年(59)

我的朋友

分类: Python/Ruby

2010-10-18 16:08:06

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


其它资料

一些有用的Python函式庫列表



阅读(1289) | 评论(1) | 转发(0) |
0

上一篇:Python模块

下一篇:OSI七层模型详解

给主人留下些什么吧!~~

chinaunix网友2010-10-19 20:34:44

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com