python面向對象的特點,類定義等,私有屬性、公有屬性、成員屬性


引子:類的對象在內存中的表示
def dog(name,dog_type):
def bark(d):
print(d,'wang wang wang ...')
data = {
'name':name,
'type':dog_type
'bark':bark
}
調用方法:
d1 = dog('小哈','哈士奇')
d1['bark'](d1)

可以阻止不同類型角色的方法混用
但是同類角色也有不同的地方,這時候快速開發等等需要引入面向對象的概念
對象間復雜的關系描述,有相同點也有不同點。需要面向對象的思想

1.類 略
2.對象 略
3.封裝
作用防止內部對象數據不能被外部隨意修改
使外部程序不需要關注對象內部的構造,只需要通過對象對外提供的接口進行訪問
4.繼承
5.多態
“一個接口,多種實現”

------------------------

class Dog(object):
    country = 'JP'  #全局變量,通過類修改后,所有對象全改,通過對象修改只是單個對象改了
    def __init__(self,name):
        self.NAME = name #成員屬性
    def sayhi(self):
        print('hello, I am a dog',self.NAME)                

self表示對象本身,NAME為類的成員屬性

d = Dog("a") # Dog(d,"a")
d2 = Dog("b")

類-->實例化--->實例對象
__init__ #構造函數
self.name = name #成員屬性
def sayhi() #方法
* 私有屬性外部不能直接訪問,兩個下划線定義,屬於該對象內部私有。
self.__heart = "Normal"
如果想讓私有屬性只能被讀 不能被改可以
def get__heart(self):
return self.__heart
強制訪問私有屬性:r1._Role__heart r1對象名,Role類名,__heart私有屬性
* 公有屬性:所有屬於該類的對象都可以訪問的屬性,屬於該類。(常量)country
實例化之前就已經存在,可以通過 類名.共有屬性去訪問
通過類名去改country,那么以后所有通過對象去訪問的country都改了
通過某實例去改,實際是在r1內存中加了一個country
r1.country=CN 只有r1對象改了,其他沒有變還是JP

* 成員屬性,self.NAME等屬性,屬於對象本身。

注意:country,sayhi在內存中只有一份,對象調用的時候都是把對象的引用傳給類中的方法調用。

可以看出方法也是公有的。例如sayhi只有一份。
如果要改成私有方法(每個對象單獨的一份)需要:
def private(self):
print("private")
r1.sayhi = private
r1.sayhi(r1)


免責聲明!

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



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