-
類方法需要使用@classmethod來標記為類方法,否則定義的還是實例方法
類方法的第一個參數將傳入類本身,通常將參數名命名為 cls,上面的 cls.__localtion 實際上相當于Animal.__localtion。
查看全部 -
pass是空語句,不做任何事情,一般用作占位語句
查看全部 -
_str__()函數似乎沒有在自定義類Person中生效,這是為什么呢?
這是因為 Python 定義了__str()__和__repr__()兩種方法,__str()__用于顯示給用戶,而__repr__()用于顯示給開發人員,當使用str()時,實際調用的是__str__()方法,而直接輸入變量,調用的是__repr__()方法。查看全部 -
?def?__init__(name,?sex,?age):
?__init__? ?兩個下劃線
查看全部 -
__slots__的目的是限制當前類所能擁有的屬性,避免因為外部屬性的操作導致類屬性越來越難以管理。
查看全部 -
實例方法不同的是,這里有兩點需要特別注意:
類方法需要使用@classmethod來標記為類方法,否則定義的還是實例方法
類方法的第一個參數將傳入類本身,通常將參數名命名為 cls,上面的 cls.__localtion 實際上相當于Animal.__localtion。
? ??? ?因為是在類上調用,而非實例上調用,因此類方法無法獲得任何實例變量,只能獲得類的引用。
查看全部 -
在定義繼承類的時候,有幾點是需要注意的:
class Student()定義的時候,需要在括號內寫明繼承的類Person
在__init__()方法,需要調用super(Student, self).__init__(name, gender),來初始化從父類繼承過來的屬性
查看全部 -
Python 定義了__str()__和__repr__()兩種方法,__str()__用于顯示給用戶,而__repr__()用于顯示給開發人員,當使用str()時,實際調用的是__str__()方法,而直接輸入變量,調用的是__repr__()方法。
查看全部 -
因為是在類上調用,而非實例上調用,因此類方法無法獲得任何實例變量,只能獲得類的引用。
查看全部 -
和實例方法不同的是,這里有兩點需要特別注意:
類方法需要使用@classmethod來標記為類方法,否則定義的還是實例方法
類方法的第一個參數將傳入類本身,通常將參數名命名為 cls,上面的 cls.__localtion 實際上相當于Animal.__localtion。
查看全部 -
實例方法的第一個參數永遠都是self,self是一個引用,指向調用該方法的實例對象本身
查看全部 -
在類屬性和實例屬性同時存在的情況下,實例屬性的優先級是要高于類屬性的,在操作實例的時候,優先是操作實例的屬性。
另外,當實例沒有和類同名的時候,通過實例對象,依然可以訪問到類屬性。
通過實例是無法修改類的屬性的,事實上,通過實例方法修改類屬性,只是給實例綁定了一個對應的實例屬性:
當實例沒有和類同名的時候,通過實例對象,依然可以訪問到類屬性。
cat.localtion?=?'Africa' print(Animal.localtion)?#?==>?Asia
這里依然打印了Asia,可見通過實例是無法修改類的屬性的,事實上,通過實例方法修改類屬性,只是給實例綁定了一個對應的實例屬性:
#?新增的實例屬性 print(cat.localtion)?#?==>?Africa
此,需要特別注意,盡量不要通過實例來修改類屬性,否則很容易引發意想不到的錯誤。
查看全部 -
#?類屬性,也可以通過類名直接訪問 print(Animal.localtion)?#?==>?Asia
類屬性也是可以動態添加和修改的,需要注意的是,因為類屬性只有一份,所以改變了,所有實例可以訪問到的類屬性都會變更:
Animal.localtion?=?'Africa' print(cat.localtion)?#?==>Africa print(dog.localtion)?#?==>Africa
查看全部 -
在前面,實例對象綁定的屬性只屬于這個實例,綁定在一個實例上的屬性不會影響其它實例;同樣的,類也可以綁定屬性,但是類的屬性不屬于任何一個對象,而是屬于這個類。如果在類上綁定一個屬性,則所有實例都可以訪問類的屬性,并且,所有實例訪問的類屬性都是同一個!也就是說,實例屬性每個實例各自擁有,互相獨立,而類屬性有且只有一份。
查看全部 -
當創建實例時,__init__()方法被自動調用,
class?Person(object): ????def?__init__(self,?name,?sex,?age): ????????self.name?=?name ????????self.sex?=?sex ????????self.age?=?age
需要注意的是,__init__() 方法的第一個參數必須是 self(也可以用別的名字,但建議使用習慣用法),后續參數則可以自由指定,和定義函數沒有任何區別。
定義類后,就可以相應的實例化對象了,需要注意的是,在實例化的時候,需要提供除self以外的所有參數查看全部
舉報