python類object類
『壹』 python的type和object之間是怎麼一種關系
object 和 type的關系很像雞和蛋的關系,先有object還是先有type沒法說,obejct和type是共生的關系,必須同時出現的。
在看下去之前,也要請先明白,在Python裡面,所有的東西都是對象的概念。
在面向對象體系裡面,存在兩種關系:
- 父子關系,即繼承關系,表現為子類繼承於父類,如『蛇』類繼承自『爬行動物』類,我們說『蛇是一種爬行動物』,英文說『snake is a kind of reptile』。在python里要查看一個類型的父類,使用它的__bases__屬性可以查看。
- 類型實例關系,表現為某個類型的實例化,例如『萌萌是一條蛇』,英文說『萌萌 is an instance of snake』。在python里要查看一個實例的類型,使用它的__class__屬性可以查看,或者使用type()函數查看。
『貳』 Python 為什麼要繼承 object 類
繼承了object的類是新式類,由於他們都是object的派生類,便於統一操作。py2由於一些類不繼承object,就弄了一些內置函數,兩種風格摻雜在一起很別扭。其實這點在動態語言裡面看不出優勢,在靜態類型的語言比如java之中優勢一目瞭然。
『叄』 Python 的 type 和 object 之間是怎麼一種關系
Python的object和type理解
1、節選自Python Documentation 3.5.2的部分解釋
Objects are Python』s abstraction for data. All data in a Python program is represented by objects or by relations between objects. (In a sense, and in conformance to Von Neumann』s model of a 「stored program computer,」 code is also represented by objects.)
對象是Python對數據的抽象。 Python程序中的所有數據都由對象或對象之間的關系表示。(在某種意義上,並且符合馮·諾依曼的「存儲程序計算機」的模型,代碼也由對象表示的)。
Every object has an identity, a type and a value. An object』s identity never changes once it has been created; you may think of it as the object』s address in memory. The 『is『 operator compares the identity of two objects; the id() function returns an integer representing its identity.
每個對象都有一個標識,一個類型和一個值。 對象的身份一旦創建就不會改變; 你可以把它看作內存中的對象地址。'is'運算符比較兩個對象的標識; id()函數返回一個表示其身份的整數。
An object』s type determines the operations that the object supports (e.g., 「does it have a length?」) and also defines the possible values for objects of that type. The type() function returns an object』s type (which is an object itself). Like its identity, an object』s type is also unchangeable.
對象的類型決定對象支持的操作(例如,「它有長度嗎?」),並且還定義該類型對象的可能值。type()函數返回一個對象的類型(它是一個對象本身)。與它的身份一樣,對象的類型也是不可改變的。
2、Pyhtml的解釋:
object:
class object
The most base type
type:
class type(object)
type(object_or_name, bases, dict)
type(object) -> the object's type
type(name, bases, dict) -> a new type
從上面三個圖可以看出,對象obeject是最基本的類型type,它是一個整體性的對數據的抽象概念。相對於對象object而言,類型type是一個稍微具體的抽象概念,說它具體,是因為它已經有從對象object細化出更具體抽象概念的因子,這就是為什麼type(int)、type(float)、type(str)、type(list)、type(tuple)、type(set)等等的類型都是type,這也是為什麼instance(type, object)和instance(object, type)都為True的原因,即類型type是作為int、float等類型的整體概念而言的。那麼,為什麼issubclass(type, object)為True,而issubclass(object, type)為Flase呢?從第二張圖,即從繼承關系可以看到,type是object的子類,因此前者為True,後者為False。若從Python語言的整體設計來看,是先有對象,後有相對具體的類型,即整體優先於部分的設計思想。
如果從更加本質的視角去看待這些問題的話,就要從Python Documentation-->3. Data Model-->3.1 Objects,values and types找原因了[請參考Python官方標准庫],從標准庫里可以看到:
object是Python對數據的抽象,它是Python程序對數據的集中體現。
每個對象都有一個標識,一個類型和一個值。
對象的類型決定對象支持的操作。
某些對象的值可以更改。 其值可以改變的對象稱為可變對象;對象的值在創建後不可更改的對象稱為不可變對象。
因此,從Python整體設計體系來看的話,就是先有對象,再有標識、類型和值,接著是對對象的操作等等,這也就解釋了圖3的結果形成的原因了。
『肆』 python的class中的object是什麼意思
object 是指這個類繼承的最頂級的對象。python3.x 中已經可以省略object,可直接
classSample():
pass
『伍』 python中的object類有何作用
object是一個基類,或稱之為元類。
在python2.x上,不繼承object類的稱之為經典類,繼承了object類的稱之為新式類
關於它們的區別,你可以閱讀以下python2手冊中的這個部分:
https://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes
『陸』 Python 為什麼要繼承 object 類
py 2.2 後繼承 object 的目的是使這個類成為 new style class, 沒有繼承 object 的為傳統 classic class,
在本機進行了測試,環境為 py 2.7.3
class Foo(object):
pass
class Foo1:
pass
print type(Foo), type(Foo1)
print dir(Foo)
print dir(Foo1)
print isinstance(Foo, object)
print isinstance(Foo1, object)
結果如下:
<type 'type'> <type 'classobj'>
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__mole__', '__new__', '__rece__', '__rece_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
['__doc__', '__mole__']
True
True
『柒』 python怎麼查看object 里的成員變數
首先通過一個例子來看一下本文中可能用到的對象和相關概念。
對於實現了__call__的類實例,這個方法會返回False。如果目的是只要可以直接調用就需要是True的話,不妨使用isinstance(obj, collections.Callable)這種形式。我也不知道為什麼Callable會在collections模塊中,抱歉!我猜大概是因為collections模塊中包含了很多其他的ABC(Abstract Base Class)的緣故吧:)
3.2. 獲取對象信息
getmembers(object[, predicate]):這個方法是dir()的擴展版,它會將dir()找到的名字對應的屬性一並返回,形如[(name, value), ...]。另外,predicate是一個方法的引用,如果指定,則應當接受value作為參數並返回一個布爾值,如果為False,相應的屬性將不會返回。使用is*作為第二個參數可以過濾出指定類型的屬性。
getmole(object):還在為第2節中的__mole__屬性只返回字元串而遺憾嗎?這個方法一定可以滿足你,它返回object的定義所在的模塊對象。
get{file|sourcefile}(object):獲取object的定義所在的模塊的文件名|源代碼文件名(如果沒有則返回None)。用於內建的對象(內建模塊、類、函數、方法)上時會拋出TypeError異常。
get{source|sourcelines}(object):獲取object的定義的源代碼,以字元串|字元串列表返回。代碼無法訪問時會拋出IOError異常。只能用於
『捌』 python中object基類到底有什麼用
基類
就是所有對象的跟,這樣定義是有歷史原因的。
繼承了object的類是新式類,由於他們都是object的
派生類
,便於統一操作。py2由於一些類不繼承object,就弄了一些內置函數,兩種風格摻雜在一起很別扭。其實這點在動態語言裡面看不出優勢,在靜態類型的語言比如java之中優勢一目瞭然。