class Test:
num=100
def __init__(self):
self.age=18
test1=Test()
test2=Test()
print(test1.num)
test1.num=200
"""
只是修改了這個對象作用域下的屬性
類中的num不會發生改變
"""
print(test1.num)
print(Test.num)
del test1.num
print(test1.num)
def __init__方法的作用域限制在實例化出的對象
self.age=18
這里的age屬性是對象的特有屬性,類訪問不到
跟 p=person()
p.age=18
是一樣的效果
只有p能訪問到這個age,person訪問不到
如果person中也有這個age,是在兩個區域,互不影響
除非在p中的age屬性刪除之后,p會向person中找相關的屬性
class a:
def __init__(self):
self.name="a"
self.age=12
self.score=23
def test():
print("類方法測試")
print(a.name)
"""
這里會報錯,因為def __init__構造函數之內的屬性只能通過
實例化對象之后,通過對象進行訪問,類沒有辦法直接訪問
如果是對象中再增加屬性,或者修改屬性的值,這些都跟類的屬性沒有關系
因為兩種屬性是在兩個區域內創建的
"""
a.test()
對於類:
-
類可以直接訪問類屬性
-
類不可以直接訪問實例方法,必須通過實例化之后的對象來訪問實例方法
-
類不可以訪問對象特有的屬性(比如:def __init__中定義的屬性)
-
類可以直接訪問類方法
-
類可以直接訪問靜態方法
所以存在:如果對象中的屬性跟類中的屬性相同,改變對象中的屬性值,不會影響類中的屬性值
對於對象:
-
對象可以直接訪問類的屬性(實例化過程中,類已經將屬性賦給對象)
-
對象可以直接訪問自己私有的屬性
-
對象可以直接訪問類方法
-
對象可以直接訪問靜態方法
-
對象可以直接訪問實例方法
class a:
def __init__(self,name):
self.name=name
print(self.name)
age="這是類屬性"
def test(self):
self.name="name已經修改"
self.age="age已經修改"
print(self.age)
print(self.name)
a1=a("這是對象屬性")
print(a.age)
print(a1.name)
print(a1.age)
a1.test()
這里所有的帶有self的方法都是實例方法,只能由對象才能訪問到,且實例方法中可以訪問對象的屬性。