Python中類-帶括號與不帶括號的區別

  引言

  有時候看到羣裏一些人問一些基礎的知識,雖然很基礎,網上隨便一查便可知道,可是每每不少人就是連這些基礎的知識都很模糊,甚至不清楚,這裏再來複習一下python中類的一個知識點(僅此)。python

  類的定義

  用來描述具備相同的屬性和方法的對象的集合。它定義了該集合中每一個對象所共有的屬性和方法。對象是類的實例。ssh

  舉個生活栗子,一個公司能夠看做一個類,公司下的部門,能夠方法,公司有不少不一樣級別的領導,能夠看做是屬性,部門能夠有不少,領導能夠是BOSS,也能夠是小部門的領導。因此一個類下面能夠有多個方法和多個屬性,屬性能夠只屬於某個方法,也能夠是全局的。學習

  類的建立

  python3建立類的方式有兩種,一種帶括號,一種不帶括號。測試

class Test:
    def __init__(self,x):
        self.x = x
    def outprint(self):
        return self.x


class Test2:
    def __init__(self,x):
        self.x = x
    def outprint(self):
        return self.x

class Test3(object):
    def __init__(self,x):
        self.x = x
    def outprint(self):
        return self.x


a = Test
b = Test2
c = Test3
print(a)
print(b)
print(c)
print(a(1))
print(b(1))
print(c(1))

  

運行結果:spa

<class '__main__.Test'>
<class '__main__.Test2'>
<class '__main__.Test3'>
<__main__.Test object at 0x000001A6A7E88668>
<__main__.Test2 object at 0x000001A6A7E88668>
<__main__.Test3 object at 0x000001A6A7E88668>

  

  結論:因而可知,python3建立類的時候,能夠不帶括號,也能夠帶,也能夠顯示繼承object,若是帶個()空括號,其實也是隱士的繼承了object。這三種方式是相等的。code

  賦值

  上面已經講了類的建立,在講類的實例化以前,先說一下賦值。orm

  Python 中的變量不須要聲明。每一個變量在使用前都必須賦值,變量賦值之後該變量纔會被建立。在 Python 中,變量就是變量,它沒有類型,咱們所說的"類型"是變量所指的內存中對象的類型。對象

  等號(=)用來給變量賦值。blog

  等號(=)運算符左邊是一個變量名,等號(=)運算符右邊是存儲在變量中的值。例如:繼承

  

a = None
print(id(a))
print(id(None))
print(a == None)

  

  運行結果:

1625859280
1625859280
True

  結論:能夠看出,a賦值了None後,a 與None指向同一個內存地址,而且值也相等,因此a == None 是True。

  我以前講過,python對象三個基本要素:id,value,type。id是對象的惟一標識,value對象的值,type標識對象的類型。全部變量即對象。

  上面a is None的話,就是經過id來判斷,若是是a == None的話,就是經過value來判斷。

 

  類的實例化

  上面賦值咱們用的是「等號」,是針對變量的。其實在講類的建立,也用了「=」號來賦值。

  什麼是實例化? 「類提供默認行爲,是實例的工廠」,打個比方,車是類,別克凱越是類的實例。  

  類的實例化只有一種方式,就是實例化的時候,須要帶括號,這個括號根據實際狀況能夠爲空,也能夠傳參。看例子:

class Test:
    def __init__(self,x):
        self.x = x
    def outprint(self):
        return self.x

class Test_1(object):
    def __init__(self,x):
        self.x = x
    def outprint(self):
        return self.x

# 給類起一個別名
a = Test
# 實例化類
b = Test(1)
# 實例化類
c = Test_1

print(a)
print(a == Test)
print(b)
print(Test(1))
print(id(b))
print(id(Test(1)))
print(b == Test(1))
print(c)
# 賦值
d = a
print(id(Test))
print(id(a))
print(id(d))
print(a == d)
# 獲取當前類的屬性列表
print(dir(a))
print(dir(c))

  

  運行結果:

<class '__main__.Test'>
True
<__main__.Test object at 0x00000168B1458630>
<__main__.Test object at 0x00000168B1458668>
1549162350128
1549162350576
False
<class '__main__.Test_1'>
1549339665432
1549339665432
1549339665432
True
['__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__', 'outprint']
['__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__', 'outprint']

Process finished with exit code 0

  

  結論:我把前面的例子也寫進來了,就是方便理解,有點多,但要耐心點看。

  上面的結果告訴咱們:python的類,帶括號是實例化,不帶括號是賦值。(記住這個)

 

  總結

 以上內容是一個簡單的知識點,小知識點容易被忽略,不清楚的能夠再複習一次。

另外,對測試開發,自動化測試技術與思想感興趣的朋友,能夠加入QQ測開交流羣:696400122進行交流,互相學習與進步。不積跬步無以致千里!

相關文章
相關標籤/搜索