eg:
class Learning(Object):
name = 'property'
def __init__(self):
target = 'senior'
如上面的例子,在類中定義屬性的時候,直接寫的name和在init中的 target,有什么區別?麻煩大神解答一下
uj5u.com熱心網友回復:
name是類物件屬性target是__init__函式的區域變數
self.target是實體物件的屬性
個人理解,希望對你有幫助。
uj5u.com熱心網友回復:
name屬性是 類learning的類屬性,有且僅有一份,所有該類的下的實體共享這個屬性,而且可以 Learning.name這么呼叫;但是init下的target不能Learning.target這樣呼叫。只能在下面呼叫宣告這個類的實體后,用實體來訪問。(實體都可以訪問這兩個屬性)。
然后你的代碼有點錯,Object前面小寫o;init下 target不能直接寫,需要在init宣告,然后用self來呼叫target(在定義的方法內部)
給你我測驗的代碼,你跑一下就全明白了
class Learning(object):
name = 'property'
def __init__(self, target):
self.target = 'ppp'
print(Learning.name)
p1 = Learning('ddd')
print(p1.name)
print(p1.target)
p1.target = 'ddd'
print(p1.target)
p1.name = 'TOM'
print(p1.name)
print(Learning.name)
uj5u.com熱心網友回復:
name是類的屬性,是Learning類獨有的變數,而__init__是建構式,在創建實體的時候里面設定的變數會變成實體獨有的變數。 類的屬性可以通過繼承搜索得到。假設:
A = Learning(3)
那么A.target 就等于3
如果你寫A.name ,會得到'property',但這不是直接從A里面得到的,是通過繼承搜索從類Learning里面找到的,A本身沒有這個屬性。
PS:你的__init__函式里面變數名要加self,即 self.target = 'target',可以參考樓上的
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/11775.html
上一篇:小白爬蟲的問題
