老菜的园子

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

类的定义

定义类成员函数时,必须带有self参数,通过这个参数访问类的对象实例(object instance)。

类的定义,其实就是定义了代码块。这个代码块中可以定义变量、函数,也可以定义语句。

类的成员变量是public,使用双下划线开头命名的变量,为private类型(这只是一种convention,其实还是可以通过其它方式访问,Python中没有绝对的private访问控制)。

在类中定义变量的时候,要区分:

  • class varialbe -- 在类中定义,被所有实例共享
  • instance variable -- 在类的初始化函数中定义

下面两种调用方式是相同的:

  • dog.getcolor(d)
  • d.getcolor()

>>> class dog:

         m_color = "red"

         def shout(self, words):

                   print("a dog is saying:", words)

         def setcolor(self, color):

                   self.m_color = color

         def getcolor(self):

                   print("color is:", self.m_color)                 

>>> d = dog()

>>> d.getcolor()

color is: red

>>> d.setcolor("yellow")

>>> d.getcolor()

color is: yellow

>>>

继承

格式:class suclassname(superclassname)

对 overrided 的函数,总是采用动态绑定的方式。如果要实现静态绑定调用,需要使用 name mangle 机制。

如果多个超类中定义了相同的方法,先继承的那个类中定义的生效。

 

>>> class homedog(dog):

         def shout(self, words):

                   print("it is a homedog")                 

>>> hd = homedog()

>>> hd.shout("home")

it is a homedog

>>>

类相关函数

Issubclass()

Isinstance()

Hasattr()

Getattr()

Setattr()

 

Class.__bases__

Class.__class__

Class.__dict__

 

>>> issubclass(homedog, dog)

True

>>> homedog.__bases__

(<class '__main__.dog'>,)

>>> isinstance(hd, homedog)

True

>>> hd.__class__

<class '__main__.homedog'>

 

>>> hasattr(d, "m_color")

True

>>> hasattr(d, "m_eye")

False

>>> getattr(d, "m_color")

'red'

>>> setattr(d, "m_color", "green")

>>> getattr(d, "m_color")

'green'

 Iterator

class必须支持__iter__()函数,返回一个iterator对象,这个对象有next()方法。遇到结束时,返回异常 StopIterator。

一种更快捷的支持iterator的办法是使用 yield,yield() 自动处理上面的函数,保存局部变量。
posted on 2012-03-04 22:00  weichsel  阅读(307)  评论(0编辑  收藏  举报