類的特性
阿新 • • 發佈:2017-07-11
傳參 line 成員 ror .sh color highlight 調用 say
一、概述
1.定義類(class Dog(object))--> 實例化(d = Dog())---> 實例對象(d)
2. __init__() 構造函數
3. self.name = name 類的屬性、成員變量
4. def say_hi() 類的方法 、動態屬性
二、訪問類的屬性
class Role(object): def __init__(self, name, role, weapon, life_value=100, money=15000): self.name = name self.role = role self.weapon = weapon self.life_value = life_value self.money = money def shot(self): print("%s is shooting..." % self.name) def got_shot(self): print("ah...,%s got shot..." % self.name) def buy_gun(self, gun_name): print("%s just bought %s" % (self.name,gun_name)) r1 = Role(‘Alex‘, ‘police‘, ‘AK47‘) # 生成一個角色 r2 = Role(‘Jack‘, ‘terrorist‘, ‘B22‘) # 生成一個角色
2.1 訪問類的屬性和方法
我們用 實例對象.屬性/方法 來訪問
r1.shot() # 調用shot 方法 r2.buy_gun(‘B13‘) # 調用 buy_gun的方法並傳參 print(r1.role) # 打印類的屬性 # 輸出 Alex is shooting... Jack just bought B13 police
2.1 修改對象的屬性
在上例中我們為r2這個角色更換了武器,即 B22 --> B13。但實際上我們調用r2這個角色的武器屬性是,會發現他的武器沒有改變:
r2.buy_gun(‘B13‘) print(r2.weapon) # 輸出 Jack just bought B13 B22 # 可以發現武器依然是 B22
其實我們可以在購買武器是直接改變對象的屬性:
def buy_gun(self, gun_name): print("%s just bought %s" % (self.name, gun_name)) self.weapon = gun_name # 在方法內改變屬性 r2.buy_gun(‘B13‘) print(r2.weapon) #輸出 Jack just bought B13 B13 # 可以發現武器已經改變
三、私有屬性
3.1、定義私有屬性
類的屬性一旦被定義成私有屬性,就不能被外部調用和隨意修改。私有屬性只能在類是內部使用。
class Person(object): def __init__(self, name, job, phone, address): self.name = name self.job = job self.phone = phone self.__address = address # 定義一個私有屬性 def sayhi(self): print("hell,%s" % self.name) p1 = Person(‘Bigberg‘, ‘Doctor‘, ‘8833421‘, ‘hz‘) print(p1.name) print(p1.__address) # 訪問私有屬性 # 輸出 Bigberg File "G:/python/untitled/study6/類的私有屬性.py", line 17, in <module> print(p1.__address) AttributeError: ‘Person‘ object has no attribute ‘__address‘
運行的結果是訪問屬性name是可以通過的,但是直接訪問私有屬性 self.__address 報錯了。但是如果通過其他的方法,還是可以訪問的到的。
3.2、get的方法訪問私有屬性
外部不能直接訪問私有屬性,但是在類的內部可以訪問,所以我們可以定義一個方法來獲取私有屬性。
class Person(object): def __init__(self, name, job, phone, address): self.name = name self.job = job self.phone = phone self.__address = address def get_private(self): return self.__address def sayhi(self): print("hell,%s" % self.name) p1 = Person(‘Bigberg‘, ‘Doctor‘, ‘8833421‘, ‘hz‘) res = p1.get_private() print(res) # 輸出 hz
3.3 強制訪問私有屬性
我們還可以通過一種方法來強制訪問私有屬性,甚至修改私有屬性的值。方法:對象名._類名__屬性名。
class Person(object): def __init__(self, name, job, phone, address): self.name = name self.job = job self.phone = phone self.__address = address def get_private(self): return self.__address def sayhi(self): print("hell,%s" % self.name) p1 = Person(‘Bigberg‘, ‘Doctor‘, ‘8833421‘, ‘hz‘) print(p1._Person__address) # 訪問私有屬性 print("----change----") p1._Person__address = ‘BJ‘ # 修改私有屬性 print(p1._Person__address) #輸出 hz ----change---- BJ
四、總結
1、定義私有屬性:self.__private_attr_name = private_attr_name
2、強制訪問私有屬性:對象名._類名__屬性名(d._dog__sex)
3、對外提供只讀接口訪問:
def get_sex(self):
return self.__sex
類的特性