python中的類屬性和對象屬性的作用域


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()

對於類:

  1. 類可以直接訪問類屬性

  2. 類不可以直接訪問實例方法,必須通過實例化之后的對象來訪問實例方法

  3. 類不可以訪問對象特有的屬性(比如:def __init__中定義的屬性)

  4. 類可以直接訪問類方法

  5. 類可以直接訪問靜態方法

所以存在:如果對象中的屬性跟類中的屬性相同,改變對象中的屬性值,不會影響類中的屬性值

對於對象:

  1. 對象可以直接訪問類的屬性(實例化過程中,類已經將屬性賦給對象)

  2. 對象可以直接訪問自己私有的屬性

  3. 對象可以直接訪問類方法

  4. 對象可以直接訪問靜態方法

  5. 對象可以直接訪問實例方法

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的方法都是實例方法,只能由對象才能訪問到,且實例方法中可以訪問對象的屬性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM