龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > python编程 >

Python入门篇之面向对象(2)

时间:2014-10-21 11:47来源:网络整理 作者:网络 点击:
分享到:
复制代码 代码如下: class c(object): foo = 100 print c.foo 100 c.foo+=1 c.foo 101 方法 复制代码 代码如下: class MyClass(object): def myNoActionMethod(self): pass mc = MyClass() mc.myN

复制代码 代码如下:

>>> class c(object):
    foo = 100
>>> print c.foo
100
>>> c.foo+=1
>>> c.foo
101

方法
 

复制代码 代码如下:

>>> class MyClass(object):
        def myNoActionMethod(self):
        pass
>>> mc = MyClass()
>>> mc.myNoActionMethod()         

任何像函数一样对 myNoActionMethod 自身的调用都将失败:

复制代码 代码如下:

>>> myNoActionMethod() Traceback (innermost last):
File "<stdin>", line 1, in ?
myNoActionMethod() NameError: myNoActionMethod

甚至由类对象调用此方法也失败了。

复制代码 代码如下:

>>> MyClass.myNoActionMethod() Traceback (innermost last):
File "<stdin>", line 1, in ?
MyClass.myNoActionMethod()
TypeError: unbound method must be called with class
instance 1st argument

绑定(绑定及非绑定方法)
为与 OOP 惯例保持一致,Python 严格要求,没有实例,方法是不能被调用的。这种限制即 Python所描述的绑定概念(binding),在此,方法必须绑定(到一个实例)才能直接被调用。非绑定的方法可能可以被调用,但实例对象一定要明确给出,才能确保调用成功。然而,不管是否绑定,方法都是它所在的类的固有属性,即使它们几乎总是通过实例来调用的。
 
决定类的属性
 
要知道一个类有哪些属性,有两种方法。最简单的是使用 dir()内建函数。另外是通过访问类的字典属性__dict__,这是所有类都具备的特殊属性之一。
 
看一下下面的例子:
 

复制代码 代码如下:

>>> class myclass(object):
    'myclass class definition' #类定义
    myVersion = '1.1'          #静态数据
    def showVesion(self):      #方法
        print myclass.myVersion
       
>>> dir(myclass)

运行结果:

复制代码 代码如下:

['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'myVersion', 'showVesion']

使用:

复制代码 代码如下:

>>> myclass.__dict__
dict_proxy({'__module__': '__main__', 'showVesion': <function showVesion at 0x0134C9B0>, '__dict__': <attribute '__dict__' of 'myclass' objects>, 'myVersion': '1.1', '__weakref__': <attribute '__weakref__' of 'myclass' objects>, '__doc__': 'myclass class definition'})

从上面可以看到,dir()返回的仅是对象的属性的一个名字列表,而__dict__返回的是一个字典,它的键(keys)是属性名,键值(values)是相应的属性对象的数据值。
结果还显示了 MyClass 类中两个熟悉的属性,showMyVersion 和 myVersion,以及一些新的属性。这些属性,__doc__及__module__,是所有类都具备的特殊类属性(另外还有__dict__)。。内建的 vars()函数接受类对象作为参数,返回类的__dict__属性的内容。

精彩图集

赞助商链接