1. 程式人生 > >python之路--面向物件-成員

python之路--面向物件-成員

1. 成員
  在類中你能寫的所有內容都是類的成員

class 類名:
    # 方法
    def__init__(self, 引數1, 引數2...):
        # 屬性變數
        self.屬性1 = 引數1
        self.屬性2 = 引數2
        ...
    # 方法
    def method(self):
        pass

在上⾯程式碼中__init__和method都屬於類的成員⽅法. ⼜稱為例項⽅法. 總之這樣的東⻄
需要⽤物件來訪問. ⽽上⽅的self.屬性1 = 引數1 這個程式碼的含義是給物件設定屬性資訊. 含
義是這個物件的xxx屬性是xxxx. 這種東⻄⼜被稱之為成員變數或者例項變數, 再或者被稱之
為欄位. 都是⼀個意思.

2. 變數
  1. 例項變數(欄位): 昨天寫的就是例項變數, 由物件去訪問的變數.
  2. 類變數.(靜態變數) 此時. 這個變數屬於類. 但是物件也可以訪問.

  

      先說什麼是例項變數. 說⽩了. 就是每個例項都應該擁有的變數. 比如. ⼈的名字, ⼈的愛好,
  每個⼈的個⼈資訊. 都屬於例項變數. 那什麼是類變數. 就是這⼀類事物統⼀擁有的變數. 比
  如. 在座的各位都是中國⼈. 那⼤家都擁有同⼀個國家. 例:

 

class Person:
    # 類變數, 表示所有的該類的物件都共享這個變數.
    country = "中國"
    def __init__(self, name, num, birthday):

        # 例項變數(欄位) 表示你建立的每一個人都有這三個變數
        self.name = name
        self.num = num
        self.birthday = birthday
p1 = Person("alex", 18, "1840年06⽉01⽇")
print(p1.name) # alex
print(p1.country) #中國
p2 = Person("wusir", 28, "1894年07⽉25⽇")
print(p2.name) # wusir
print(p2.country)  # 中國

  我們發現物件p1和p2的name都是物件⾃⼰的. 但是country是類的. ⼤家公⽤同⼀個變數.
  如何來驗證呢?

Person.country = "⼤清" # 在這裡. 我把國家改成了大清
p1 = Person("alex", 18, "1840年06⽉01⽇")
print(p1.name)
print(p1.country) # alex是大清的
p2 = Person("wusir", 28, "1894年07⽉25⽇")
print(p2.name)
print(p2.country)  # wusir也是大清的

  簡單的總結一下:

    例項變數,給物件用的.

    類變數,多個物件共享的,最好是用類名來訪問,這樣更加規範.

3. 方法

  1.  成員方法(例項方法) : 物件直接訪問的方法叫成員方法.

class Computer:
    # 例項⽅法(成員⽅法)
    def play(self):
        print("我的電腦可以玩⼉")
c = Computer()
c.play()  # 物件直接去呼叫例項方法

  2.靜態方法: 靜態方法不需要我們給方法傳遞self. 也就是說, 當出現一個方法不需要使用到成員變數的時候,就可以使用靜態方法,靜態方法需要我們在方法上面新增一個 @staticmethod

@staticmethod
def fare():
    print("我的電腦⾮常⽜B, 可以煎雞蛋")

  3.類方法: 類⽅法和靜態⽅法差不多, 只不過類⽅法需要在引數列表中的第⼀個位置預留⼀個位置, 通常我們給第⼀個引數起名字叫cls. 類⽅法在被調⽤的時候也不需要傳遞例項物件.但是. 系統會⾃動的把類傳遞給第⼀個引數. 類⽅法在編寫的時候, 需要在類⽅法上⾯添
加@classmethod

class Computer:
    def play(self):
        print("我的電腦可以玩⼉")
    @staticmethod
    def fare():
        print("我的電腦⾮常⽜B, 可以煎雞蛋")
    @classmethod
    def cal(cls, a, b):
        print(cls)
        return a+b
print(Computer.cal(1, 2)) # 此時會自動的

4. 屬性  

  屬性其實就是通過⽅法改造過來的⼀種變數的寫法, 在⽅法上新增⼀個@property就可以了

class Person:
    def __init__(self):
        pass
    @property
    def age(self):
        return 1
p = Person()
age = p.age
print(age)

  應用場景:我們一般儲存資料的時候不會儲存年齡,以為時間在邊年齡也在變,所以我們可以儲存出生日期,然後用程式來計算,而計算屬於一個功能,需要寫在方法裡,但是對於年齡這個屬性而言,他應該是一個數值,而不是動作,所以python就提供了這樣一種機制,通過方法來面熟一個屬性.

  注意:
    1. ⽅法引數只能有⼀個self
    2. ⽅法上⽅要寫@property
    3. 調⽤的時候, 我們不需要寫括號. 直接當成屬性變數來⽤就可以了.
    4. 這種套路只能取值. 不能設定值