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

2022-06-05 20:00:13 字數 3810 閱讀 3861

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

用來描述具有相同的屬性和方法的物件的集合。它定義了該集合中每個物件所共有的屬性和方法。物件是類的例項。

舉個生活栗子,乙個公司可以看作乙個類,公司下的部門,可以方法,公司有很多不同級別的領導,可以看作是屬性,部門可以有很多,領導可以是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))

執行結果:

<__main__.test object at 0x000001a6a7e88668>

<__main__.test2 object at 0x000001a6a7e88668>

<__main__.test3 object at 0x000001a6a7e88668>

結論:由此可見,python3建立類的時候,可以不帶括號,也可以帶,也可以顯示繼承object,如果帶個()空括號,其實也是隱士的繼承了object。這三種方式是相等的。

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

python 中的變數不需要宣告。每個變數在使用前都必須賦值,變數賦值以後該變數才會被建立。在 python 中,變數就是變數,它沒有型別,我們所說的"型別"是變數所指的記憶體中物件的型別。

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

等號(=)運算子左邊是乙個變數名,等號(=)運算子右邊是儲存在變數中的值。例如:

a = none

print(id(a))

print(id(none))

print(a == none)

執行結果:

1625859280

1625859280

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))

執行結果:

true

<__main__.test object at 0x00000168b1458630>

<__main__.test object at 0x00000168b1458668>

1549162350128

1549162350576

false

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進行交流,互相學習與進步。不積跬步無以至千里!

JS函式中帶與不帶括號的區別

js函式中帶與不帶括號的區別 其實總結起來如下 函式只要是要呼叫它進行執行的,都必須加括號。此時,函式 實際上等於函式的返回值。當然,有些沒有返回值,但已經執行了函式體內的行為,這個是根本,就是說,只要加括號的,就代表將會執行函式體 不加括號的,都是把函式名稱作為函式的指標,用於傳參,此時不是得到函...

JS函式中帶與不帶括號的區別

js函式中帶與不帶括號的區別 其實總結起來如下 函式只要是要呼叫它進行執行的,都必須加括號。此時,函式 實際上等於函式的返回值。當然,有些沒有返回值,但已經執行了函式體內的行為,這個是根本,就是說,只要加括號的,就代表將會執行函式體 不加括號的,都是把函式名稱作為函式的指標,用於傳參,此時不是得到函...

python類的方法中帶參與不帶參

1 建構函式帶引數,例項化時就需要帶引數 class person 定義類 def init self,name,leg 8 建構函式帶引數 self.name name self.leg leg defrun self 方法不帶參 print 我會跑 print self.name print s...