python 物件導向(進階篇)

來源:互聯網
上載者:User

標籤:opened   dict   close   一個   直接   ssm   訪問   .sh   執行個體化   

類的成員
  • 欄位
    • 普通欄位
      儲存在對象當中,執行只能通過對象訪問
    • 靜態欄位
      儲存在類當中, 執行可以通過類訪問也可以通過對象訪問
  • 方法
    • 普通方法
      儲存在類當中,由對象來調用
    • 靜態方法
      靜態方法,儲存在類當中,由類直接調用,也可通過對象調用
    • 類方法
      儲存在類當中,由類直接調用,也可通過對象調用
  • 屬性
    • 不用加括弧也能執行的方法
class Foo:    name = ‘nathaniel_靜態欄位‘# 靜態欄位    def __init__(self):        self.age = ‘19_普通欄位‘# 普通欄位# 靜態欄位,儲存在類當中,執行可以通過類訪問也可以通過對象訪問print(‘直接通過類訪問靜態欄位‘,Foo.name)obj = Foo()print(‘通過對象訪問靜態欄位‘,obj.name)# 普通欄位,儲存在對象當中,執行只能通過對象訪問print(‘普通欄位只能通過對象訪問‘,obj.age)class Foo1:    def foo(self):        print(‘普通方法‘)    @staticmethod # 使用裝飾器    def foo1():        print(‘靜態方法‘)    @classmethod    def foo2(cls):        # cls 類名        print(‘類方法‘)# 類方法,儲存在類當中,由類直接調用,無需執行個體化類Foo1.foo2()# 靜態方法,儲存在類當中,由類直接調用,無需執行個體化類Foo1.foo1()# 普通方法,儲存在類當中,由對象來調用obj = Foo1()obj.foo()# 類方法和靜態也可由對象調用obj.foo1()obj.foo2()
# 屬性
# 屬性
# 定義時,在普通方法的基礎上添加 @property 裝飾器;
# 定義時,屬性僅有一個self參數
# 調用時,無需括弧
# 方法:obj.func()
# 屬性:obj.func
class Foo2:    @property    def foo2(self):        print(‘屬性‘)    @foo2.setter    def foo2(self,values):        print(‘偽裝賦值‘,values,)    @foo2.deleter    def foo2(self):        print(‘偽裝刪除‘)# 屬性是方法,但是調用的時候不加括弧obj = Foo2()obj.foo2 # 自動執行 @property 修飾的foo2方法並擷取傳回值obj.foo2 = ‘123‘ # 自動執行 @foo2.setter 修飾的foo2方法並將 ‘123‘ 賦值給 valuesdel obj.foo2 # 自動執行 @foo2.deleter 修飾的foo2方法# 上述代碼的執行實際上有一個對應關係# obj.foo2 對應 @property 下的函數# obj.foo2 = ‘123‘ 對應 @foo2.setter 下的函數 # 需要一個參數# del obj.foo2 對應 @foo2.deleter 下的函數

 注意:

  • 經典類只有一種@property裝飾器,即上述執行個體中與  obj.foo2 相對應的
  • 新式類有有三種@property裝飾器,即上述執行個體中,三種都可用
類的成員修飾符

一般來說,每一個類中都可以有兩種成員

  • 公有成員,在任何地方都可以訪問
    • 公有欄位
    • 公有方法
  • 私人成員,只有在類的內部才可以訪問 # 私人成員在命名時以雙底線開頭 (特殊成員除外, __init__、__call__、__del__ 等
    • 私人欄位
    • 私人方法
    • 類的私人成員不會被子類繼承
class Foo4:    __static_foo = ‘123‘ # 靜態私人欄位,只能在內部訪問    def __init__(self,name,age):        self.name = name # 公有欄位        self.__age = age # 私人欄位,只能在內部訪問            def __foo41(self):        # 私人方法,只能在類的內部訪問        print(‘私人方法,只能在類的內部訪問,私人方法也可以訪問私人欄位%s‘% self.name)    def show(self):        # 類的內部可以訪問私人欄位和私人方法        print(self.__static_foo)        print(self.__age)        self.__foo41()obj = Foo4(‘nathaniel‘,‘20‘)print(obj.name) # 公有欄位可以訪問print(obj.__age) # 私人欄位,報錯obj.show() # 公有方法可以訪問obj.__foo41() # 私人方法,報錯
類的特殊成員1、__init__ 構造方法 類() 自動執行
2、__call__ 對象() 類()() 自動執行
3、__int__ int(對象) 自動執行對象中的 __int__ 方法,並將傳回值賦給它
4、__str__ str(對象) 自動執行對象中的 __int__ 方法,並將傳回值賦給它
5、__add__ 兩個對象相加時,自動執行第一個對象的__add__方法,並將第二個對象當做參數傳入
6、__dict__ 對象.__dict__ 將對象中的成員以列表返回 類.__dict__ 將類裡的成員以字典返回
7、__del__ 析構方法,對象被銷毀時執行
8、__getitem__ 切片(slice類型)或者索引
9、__setitem__ 按索引賦值
10、__delitem__ 按索引刪除
class Foo5:    """    __doc__方法 列印類的描述資訊    """    def __init__(self):        print(‘構造方法  類()  自動執行‘)    def __call__(self, *args, **kwargs):        print(‘對象() 類()()  自動執行‘)    def __int__(self):        return 123    def __str__(self):        return ‘123‘    def __add__(self, other):        print(str(1 + other))    def __del__(self):        print(‘析構方法,對象被銷毀時執行‘)    def __getitem__(self):        print(‘對象進行切片操作,自動執行對象裡的__getitem__方法‘)    def __setitem__(self, key, value):        print(‘對象按索引賦值,自動執行對象裡的__setitem__方法‘)    def __delitem__(self, key):        print(‘對象按索引刪除,自動執行對象裡的__delitem__方法‘)
print(Foo5.__dic__)

 

class Foo5:    passclass F0051(Foo5):    passobj = Foo5()print(isinstance(obj, Foo5)) # 檢查對象 obj 是否是類 cls 的對象print(issubclass(F0051, Foo5)) # 檢查 F0051 類是否是 Foo5 類的衍生類別
補充

 

python 物件導向(進階篇)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.