首頁 > 軟體

python中class(object)的含義是什麼以及用法

2023-02-05 14:02:11

python class(object)的含義

在python2中有區別,在Python3中已經沒有區別:

object為預設類,表示繼承關係

class Person:
    name = "zhengtong"

class Animal(object):
    name = "chonghong"
 
if __name__ == "__main__":
    x = Person()
    print( "Person", dir(x))
 
    y = Animal()
    print ("Animal", dir(y))

Python3中執行結果:

person [‘class’, ‘delattr’, ‘dict’, ‘dir’, ‘doc’, ‘eq’, ‘format’, ‘ge’, ‘getattribute’, ‘gt’, ‘hash’, ‘init’, ‘init_subclass’, ‘le’, ‘lt’, ‘module’, ‘ne’, ‘new’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘setattr’, ‘sizeof’, ‘str’, ‘subclasshook’, ‘weakref’, ‘name’]
animal [‘class’, ‘delattr’, ‘dict’, ‘dir’, ‘doc’, ‘eq’, ‘format’, ‘ge’, ‘getattribute’, ‘gt’, ‘hash’, ‘init’, ‘init_subclass’, ‘le’, ‘lt’, ‘module’, ‘ne’, ‘new’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘setattr’, ‘sizeof’, ‘str’, ‘subclasshook’, ‘weakref’, ‘name’]

class, class()和class(object)的區別

為什麼要繼承object類

Python2中,遇到 class A 和 class A(object) 是有概念上和功能上的區別的,分別稱為經典類(舊式類,old-style)與新式類(new-style)的區別。python2中為什麼在進行類定義時最好要加object,加 & 不加如下範例。

歷史程序:2.2以前的時候type和object還不統一. 在2.2統一到3之間, 要用class

  • Foo(object)來申明新式類, 因為它的type是 < type ‘type’ > 。
  • 不然的話, 生成的類的type就是 <type ‘classobj’ >。

繼承object類的原因:主要目的是便於統一操作。

  • 在python 3.X中已經預設繼承object類。
# -.- coding:utf-8 -.-
# __author__ = 'zhengtong'


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


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

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

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

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

Person類很明顯能夠看出區別,不繼承object物件,只擁有了doc , module 和 自己定義的name變數, 也就是說這個類的名稱空間只有三個物件可以操作。

Animal類繼承了object物件,擁有了好多可操作物件,這些都是類中的高階特性。

class, class()和class(object)的區別

python2中寫為如下兩種形式都是不能繼承object類的,也就是說是等價的。

def class:
def class():

繼承object類是為了讓自己定義的類擁有更多的屬性,以便使用。當然如果用不到,不繼承object類也可以。

python2中繼承object類是為了和python3保持一致,python3中自動繼承了object類。

python2中需要寫為如下形式才可以繼承object類。

def class(object):

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com