跳至主要内容

[note] Python OOP

常用方法

Global Methods

官方文件
type(obj)  # 取得建立該 instance 的 Class
isinstance(obj, Class)

# 如果屬性是會動態改變的
getattr(obj, name, [default_value]) # 拿不到該屬性時不會噴 error
setattr(obj, name, value)

Class

  • __init__
class Dog:
# Class Attribute
species = "Canis lupus familiaris"

def __init__(self, name, breed, age):
# Instance Attributes
self.name = name
self.breed = breed
self.age = age

# Instance Method
def bark(self):
return f"{self.name} is barking!"

存取 class attribute 的方式:

Dog.species

Instance

  • __dict__
buddy = Dog("Buddy", "Golden Retriever", 5)
bella = Dog("Bella", "Labrador", 3)

buddy.__dict__ # {'name': 'Buddy', 'breed': 'Golden Retriever', 'age': 5}
讀取 object attribute 的邏輯

在 Python 中,查找 object attribute 的邏輯如下,如果該 object 本身就有該屬性,則會直接拿該屬性的值,例如 buddy.name;如果該 object 本身沒有該屬性,則會看看它的 class 中有沒有該屬性,例如 buddy.species 會拿到的是 class attribute 的值(即,Dog.species);如果 instance attribute 和 class attribute 都找不到,而且也不是用 getattr 有預設值的話,則會噴 AttributeError 的錯誤。

要注意的是,這樣的邏輯只能使用在讀取 object attribute 的情況,如果是要設定 object attribute 的話,則不適用上述這樣的邏輯。

Instance Methods

基本觀念

class MyClass:
pass

MyClass.__name__ # 'MyClass'

my_obj = MyClass()

type(my_obj) # MyClass
isinstance(my_obj, MyClass) # True
  • 在 Python 中 class 也被稱作 type
    • class 的 type 也是 typetype(MyClass) == type(type) == type

資料來源

討論