1. 程式人生 > >python中定義類

python中定義類

python hook 寫上 outline add sans mil ict t對象

python定義一個類時,有時候需要(object),有時沒有,那麽問題來了,什麽時候需要,什麽時候不需要的。

如下:

# -.- coding:utf-8 -.-
# __author__ = ‘zhengtong‘


class Person:
"""
不帶object
"""
name = "lihau"

class Animal(object):
"""
帶有object
"""
name = "jiaojiao"

if __name__ == "__main__":
x = Person()
print "Person", dir(x)

y = Animal()
print "Animal", dir(y)

運行結果如下:

Person [‘__doc__‘, ‘__module__‘, ‘name‘]
Animal
[‘__class__‘, ‘__delattr__‘, ‘__dict__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘,

‘__ge__‘, ‘__getattribute__‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__le__‘, ‘__lt__‘, ‘__module__‘,

‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__setattr__‘, ‘__sizeof__‘,

‘__str__‘, ‘__subclasshook__‘, ‘__weakref__‘, ‘name‘]

很明顯能夠看出區別,Person類不繼承object對象,只擁有了doc , module 和 自己定義的name變量, 也就是說這個類的命名空間只有三個對象可以操作.
Animal類繼承了object對象,擁有了好多可操作對象,這些都是類中的高級特性。

對於不太了解python類的同學來說,這些高級特性基本上沒用處,但是對於那些要著手寫框架或者寫大型項目的高手來說,這些特性就比較有用了,比如說tornado裏面的異常捕獲時就有用到class來定位類的名稱,還有高度靈活傳參數的時候用到dict

來完成.

最後需要說清楚的一點, 本文是基於python 2.7.10版本,實際上在python 3 中已經默認加載了object了(即便你沒有寫上object)。

python中定義類