面向物件三大特性:封裝、繼承、多型
封裝的意義:
- 將屬性和方法放到一起做為一個整體,然后通過實體化物件來處理;
- 隱藏內部實作細節,只需要和物件及其屬性和方法互動就可以了;
- 對類的屬性和方法增加 訪問權限控制,
私有權限:在屬性名和方法名 前面 加上兩個下劃線 __
- 類的私有屬性 和 私有方法,都不能通過物件直接訪問,但是可以在本類內部訪問;
- 類的私有屬性 和 私有方法,都不會被子類繼承,子類也無法訪問;
- 私有屬性 和 私有方法 往往用來處理類的內部事情,不通過物件處理,起到安全作用,
class Master(object):
def __init__(self):
self.kongfu = "古法煎餅果子配方"
def make_cake(self):
print("[古法] 按照 <%s> 制作了一份煎餅果子..." % self.kongfu)
class School(object):
def __init__(self):
self.kongfu = "現代煎餅果子配方"
def make_cake(self):
print("[現代] 按照 <%s> 制作了一份煎餅果子..." % self.kongfu)
class Prentice(School, Master):
def __init__(self):
self.kongfu = "貓氏煎餅果子配方"
# 私有屬性,可以在類內部通過self呼叫,但不能通過物件訪問
self.__money = 10000
# 私有方法,可以在類內部通過self呼叫,但不能通過物件訪問
def __print_info(self):
print(self.kongfu)
print(self.__money)
def make_cake(self):
self.__init__()
print("[貓氏] 按照 <%s> 制作了一份煎餅果子..." % self.kongfu)
def make_old_cake(self):
Master.__init__(self)
Master.make_cake(self)
def make_new_cake(self):
School.__init__(self)
School.make_cake(self)
class PrenticePrentice(Prentice):
pass
damao = Prentice()
# 物件不能訪問私有權限的屬性和方法
# print(damao.__money)
# damao.__print_info()
pp = PrenticePrentice()
# 子類不能繼承父類私有權限的屬性和方法
print(pp.__money)
pp.__print_info()
總結
- Python中沒有像C++中 public 和 private 這些關鍵字來區別公有屬性和私有屬性,
- Python是以屬性命名方式來區分,如果在屬性和方法名前面加了2個下劃線'__',則表明該屬性和方法是私有權限,否則為公有權限,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/39722.html
標籤:Python
下一篇:面向物件-修改私有屬性的值
