文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Python中的面向对象

Python中的面向对象

时间:2010-10-18  来源:icybay

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 DerivedClassName(BassClassName): pass

如果基类定义在另一个模块中, 要写成 modname.BaseClassName 。派生类的函数会覆盖基类的同名函数 ,如果想扩充而不是改写基类的函数,可以这样调用基类函数

BaseClassName.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函式庫列表

啄木鸟社区

相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载