iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0
Software Development

Python 微進階系列 第 17

Python 微進階 Day17 - class(類別) - 1 - __init__、method

  • 分享至 

  • xImage
  •  

class(類別)

  • 從類別中建立的為 object(物件)
    • 在 Python 中,所有的東西都是物件,在這邊特指由類別建立的
  • 類別就像是藍圖,物件則是利用這個藍圖建立出來的 instance(實體),例如用汽車這個藍圖(類別)建出藍色的車(物件)
  • 類別名稱的命名習慣是使用 CapWords 的方式命名
  • 在類別與物件內定義的函式稱為 method(方法)
  • 在類別與物件內的變數與 method 稱為 attribute(屬性),如 物件.屬性
  • 物件的變數可透由 物件.變數 來直接定義(新建),不需要在類別內事先定義,因為物件屬於實體,因此也可以稱為 instance attribute(實體屬性)
class ClassName:
    # code
    # 相關的變數或函式

a = ClassName()
b = ClassName()
# 利用類別,建立 a 和 b 2 個物件

a.name = "a"
# a 物件建立一個 name 變數
b.name = "b"
# b 物件建立的 name 變數跟 a 不同

__init__

  • 透過 __init__ 這個 method,可以在每次使用類別時,自動初始化建立相關的變數,而不用每次都需要再一一建立
  • 在建立物件時,會自動執行的 method 稱為 constructor(建構式或建構子)
  • 一個類別內只能有一個 __init__
  • __init__ 內至少要有一個參數,名稱慣例是取為 self,因為它就是目前的物件
    • 後面可接其他參數,以 , 隔開
    • 當有其他參數時,在建立物件時就須帶入所需的參數,或設定預設值 參數=預設值
class ClassName:
    # 建構式
    def __init__(self):
        self.name = "name"

a = ClassName()
# 會自動初始化 __init__ 的變數
# 此時傳入 self 參數的就是 a 物件
# self.name 就像 a.name

print(a.name)
# name
# 預設建立變數 name = "name"
a.name = "a"
print(a.name)
# a
# name 已修改為新的值

帶參數

class ClassName:
    def __init__(self, n="name"):
        self.name = n
        # self.name 為物件變數
        # n 為函式參數

a = ClassName()
# 建立時使用預設值

b = ClassName("b")
# 建立時帶入參數 n 的值

print(a.name)
# name
print(b.name)
# b

method(方法)

  • 定義在類別或物件內的函式
  • 語法:在物件內以 def method_name(): 建立,以 物件.method_name() 的方式使用
  • method 內至少要有一個參數,名稱慣例是取為 self,因為它就是目前的物件
    • 後面可接其他參數,以 , 隔開
    • 當有其他參數時,在使用 method 時就須帶入所需的參數
    • 基本上就跟之前學習函式的部分一樣
  • 這種至少一個 self 參數的方法,又稱為 instance method(實體方法)
class ClassName:
    def __init__(self, n):
        self.name = n
    def print_name(self):
        print(self.name)

a = ClassName("a")

a.print_name()
# a

帶參數

class ClassName:
    def __init__(self, n):
        self.name = n
    def print_name(self, h):
        print(f"{h}, {self.name}")

a = ClassName("a")

a.print_name("hi")
# hi, a

參考資料

次回

希望對類別能有個基本認識,會再持續介紹


上一篇
Python 微進階 Day16 - try except(例外處理) - 2 - assert、with
下一篇
Python 微進階 Day18 - class(類別) - 2 - class variables、private variable、private method
系列文
Python 微進階31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言