python中類變數和例項變數 之例項變數

2021-07-31 03:20:31 字數 1325 閱讀 7493

class test:

def f(self, name):

self.name = name

def f1(self):

print(self.name)

#************************例項變數為例項物件特有資料************************

x1 = test() #例項化test類,建立例項物件x1

x2 = test() #例項化test類,建立例項物件x2

#-------------設定例項屬性----------

#方式1

x1.f("張三") #設定例項物件屬性

x2.f("李四")

#方式2

x1.name = 11 #設定例項物件屬性

x2.name = 22

#*****=對於上述兩種方式命名空間的分析*****=

'''上述兩種方式從表面看一樣,都是self.xx = "oo"設定例項的屬性,但是不完全一樣

方式1:

在函式內賦值,變數的值均存在於函式區域性命名空間,即例項的屬性存在於該例項的函式屬性的區域性命名空間中

因此直接訪問此類屬性只能在方法內部訪問

方式2:

直接設定例項的屬性,變數的值存在於該例項的區域性命名空間

因此訪問直接訪問此類屬性,通過例項物件直接引用即可訪問

''''''

問題來了...

如果按照上述分析,例項物件豈不是在不同命名空間中有多個同名屬性?

測試如下:

'''

x1.f("王五") #設定例項物件屬性

x2.f("趙六")

x1.f1() #王五

x2.f1() #趙六

x1.name = "王八" #設定例項物件屬性

x2.name = "趙九"

x1.f1() #王八

x2.f1() #趙九

'''

通過上述測試可以發現

1.例項物件和其方法共享同一命名空間

2.例項變數為例項物件特有資料

Python類變數和例項變數

類體中 所有函式之外 此範圍內定義的變數,稱為類屬性或類變數 類屬性的呼叫方式有 2 種,既可以使用類名直接呼叫,也可以使用類的例項化物件呼叫。需要注意的是 因為類變數為所有例項化物件共有,通過類名修改類變數的值,會影響所有的例項化物件 而不能通過類物件修改類屬性。類體中,所有函式內部 以 self...

python中的類,類變數,例項變數

這幾天寫 的時候碰到乙個python中的小問題,找了好半天才解決,所以記錄下來。classa object def init self self.x y def call self for i in range 5 print x self.x print y y 輸出的結果是 x 5,5,5,5,...

python程式設計(類變數和例項變數)

關於類變數和例項變數,一直不是很清楚。所以,想做幾個實驗,徹底解決這個問題。為此,我們設計了三個實驗。1 直接引用類變數 import os import sys class a data 10 a a b a print a.data print b.data print a.dict print...