[英]I recently started to self learn python and I'm really confused about the terminology in the "classes" section
class
(方法?)只是為了定制一個新類型嗎?
class
是對象的框架。 對象是class
的一個實例:
class PartyAnimal:
...
# `an` is an instance of PartyAnimal
an = PartyAnimal()
方法是class
中的一個函數。 在您的示例中, def party(self)
是PartyAnimal
的一種方法
真的對“屬性”感到困惑
class
的屬性是class.something
。
您的PartyAnimal
class
的屬性是self.x
部分,其中x
是PartyAnimal
的一個屬性。 您可以通過以下方式獲取每個實例的x
值:
class PartyAnimal:
x = 0
def party(self) :
self.x = self.x + 1
print("So far",self.x)
>>> an = PartyAnimal()
>>> an.x
0
# Then run the method
>>> an.party()
'So far 1'
>>> an.x
1
順便說一句
self.x = self.x + 1
在這里如何工作?
您將1
添加到屬性x
。 如果您不使用類,則與x += 1
相同
我推薦閱讀w3 關於 classes 的文章。 真的很棒
用非常簡單的話來說,在類中定義的任何變量都稱為屬性。 類的實例是該特定類的副本。
當您實例化類PartyAnimal()
時,會創建它的副本。 你將它分配給一個相同類型an
變量。
an = PartyAnimal()
現在,讓我們將an
稱為PartyAnimal()
類的實例。 an
包含一個屬性x
,該屬性最初設置為值0
。 可以使用.
操作員。
print(an.x) # output: 0
默認情況下,python 中類的屬性是public
。 這意味着它們可以在課堂之外訪問。 如果要將x
的值增加1
,可以通過以下方式進行:
an.x = an.x + 1
print(an.x) # output: 1
現在,討論方法party()
,它接受參數self
。 self
表示類的實例。 在party()
中, x
的值遞增。 要知道我們指的是該實例的變量x
而不是任何其他x
(有時名稱為x
的變量被傳遞給函數),我們使用self
。
請參閱此以了解有關self
的更多信息。
您發布的第一個鏈接解釋了您的大部分問題......
解釋什么是方法——它們是對象和類中的函數:
一個對象可以包含許多函數(我們稱之為方法)
您發布的第二個鏈接證實了這一點:
方法:在類體內定義的函數。 如果作為該類實例的屬性調用,該方法將獲取實例對象作為其第一個參數(通常稱為 self)。 請參閱函數和嵌套范圍。
解釋什么是類...
class
關鍵字定義了一個模板,該模板指示每個PartyAnimal
類型的對象中將包含哪些數據和代碼。 該類就像一個餅干切割機,使用該類創建的對象就是餅干。
counts = dict()
在這里,我們指示 Python 使用dict
模板(已經存在於 Python 中)構造一個對象,返回字典的實例,並將其分配給變量 counts。
它將dict
和PartyAnimal
作為兩個模板進行比較,這兩種類型的對象。
解釋什么是屬性——它們是對象和類中的數據:
我們稱作為對象屬性一部分的數據項。
屬性:與對象關聯的值,使用點分表達式按名稱引用。
解釋對象和實例是可互換的並且它們被分配給變量......
an = PartyAnimal()
這是我們指示 Python 構造(即創建)PartyAnimal
類的對象或實例的地方。
Python 使用正確的數據和方法構造對象並返回該對象,然后將其分配給變量
an
。
當
PartyAnimal
類用於構造對象時,變量an
用於指向該對象。
解釋你關於self.x = self.x+1
的問題......
當調用
party
方法時,第一個參數(我們按照約定調用self
)PartyAnimal
調用party
的 PartyAnimal 對象的特定實例。 在party
方法中,我們看到以下行:
self.x = self.x + 1
這種使用點運算符的語法是“
self
中的x
” 。 每次調用party()
時,內部x
值都會增加 1 並打印出該值。
我在您發布的兩個鏈接之間找不到有沖突的信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.