標籤:return 情況 子類 TE erro 構造方法 .sh eth 特殊
類 ==> 執行個體化 ==> 執行個體對象
__init__ 建構函式
self.name = name # 屬性, 成員變數
def sayhi() # 方法, 動態屬性
def get_heart(self):
return self.__heart # 提供對外提供者, 但是外部只能擷取其值,不能改變其值.
屬性
- 公有屬性
- 當所有屬於本類的對象都能訪問的屬性稱為公有屬性(即全域屬性, 在類中定義的, 而不是在某一個方法<包括構造方法>中定義的 ? 不對吧, java中全域變數也可以私人化的, 只是看有沒有private修飾而已).
- 私人屬性
- __private_attr_name = value
- 強制訪問私人屬性方法: 執行個體對象_類名__屬性名稱
#!/usr/bin/python# -*- coding: utf-8 -*-class Role(object): nationality = "JP" 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 self.__heart = "Normal" # 私人屬性, 對外不可見(相當於java的private) def shot(self): print("%s is shooting" % self.name) self.__heart = "Dead" print(self.__heart) # 私人屬性可以內部訪問 def get_heart(self): return self.__heart # 提供對外提供者, 但是外部只能擷取其值,不能改變其值. def got_shot(self): print("ah... i got shot...") def buy_gun(self, gun_name): print("just bought %s" % gun_name) self.weapon = gun_name # 這樣如果買了什麼新武器, 也會同步更新屬性weapon的值r1 = Role(‘Alex‘, ‘police‘, ‘AK47‘) # 產生一個角色r2 = Role(‘Jack‘, ‘terrorist‘, ‘B22‘) # 產生一個角色r1.shot()r2.buy_gun(‘AK47‘)print(r2.weapon) # 在buy_gun()方法中添加self.weapon = gun_name, 這樣若購買了新的武器, 就能更新屬性weapon的值# print(r1.get_heart())print(r1._Role__heart) # 外部強行訪問一個私人屬性# 更改類的公有屬性有兩種方法Role.nationality = "US" # 方法1. 所有對象的nationality值都會被更改.r1.natiocnality = "Thailand" # 方法2. 只有對象r1的nationality值會被更改.def shot2(self): # 在類中, 直接調用方法, 會自動把執行個體對象傳入方法. 在類外面的方法, 需要自己把執行個體傳入方法. print("my own shot method")r1.shot = shot2r1.shot(r1) # 調用的其實是shot2()方法. 因方法shot2()不在類中, 所以需要自己把參數傳入.
類
物件導向的特性
- 封裝
- 對象和類概念的主要特性
- 把客觀事物封裝成抽象的類, 並且類可以把自己的資料和方法只讓可信的類或對象操作, 對不可信的進行資訊屏蔽.
- 繼承
- 可以使用現在類的所有功能, 並在無需重新編寫原來類的情況下對這些功能進行擴充.
- 通過繼承建立的新類稱為"子類"或"衍生類別".
- 被繼承的類稱為"基類". "父類"或"超類".
- 繼承的過程, 就是從一般到特殊的過程.
Python 物件導向(二)