Python面向對象中,定義類名——帶括號與不帶括號的區別


類的定義

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

  舉個生活栗子,一個公司可以看作一個類,公司下的部門,可以方法,公司有很多不同級別的領導,可以看作是屬性,部門可以有很多,領導可以是BOSS,也可以是小部門的領導。所以一個類下面可以有多個方法和多個屬性,屬性可以只屬於某個方法,也可以是全局的。

類的創建

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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))

  

運行結果:

1
2
3
4
5
6
< 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。這三種方式是相等的。

  賦值

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

  Python 中的變量不需要聲明。每個變量在使用前都必須賦值,變量賦值以后該變量才會被創建。在 Python 中,變量就是變量,它沒有類型,我們所說的"類型"是變量所指的內存中對象的類型。

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

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

  

1
2
3
4
a = None
print(id(a))
print(id(None))
print(a == None)

  

  運行結果:

1
2
3
1625859280
1625859280
True

  結論:可以看出,a賦值了None后,a 與None指向同一個內存地址,並且值也相等,所以a == None 是True。

  我之前講過,python對象三個基本要素:id,value,type。id是對象的唯一標識,value對象的值,type標識對象的類型。所有變量即對象。

  上面a is None的話,就是通過id來判斷,如果是a == None的話,就是通過value來判斷。

 

  類的實例化

  上面賦值我們用的是“等號”,是針對變量的。其實在講類的創建,也用了“=”號來賦值。

  什么是實例化? “類提供默認行為,是實例的工廠”,打個比方,車是類,別克凱越是類的實例。  

  類的實例化只有一種方式,就是實例化的時候,需要帶括號,這個括號根據實際情況可以為空,也可以傳參。看例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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))

  

  運行結果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
< 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的類,帶括號是實例化,不帶括號是賦值。(記住這個)

 

  總結

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM