Python Object-oriented Programming -2 Attribute and Class

Young Chen
宅男雜誌
Published in
5 min readFeb 6, 2020

What Is Object? Class? Attribute?

Everything in Python is object.

mylist = [1, 2, 3]
myset = set()
type(mylist) #list
type(myset) #set

如上常見的Python原生形態,其實本身也是物件的一種。關於物件我嘗試解釋:Class定義了Object,而Object就是Class的一個Instance。以下程式碼用以舉例上述概念:

Class in Python

class Dog():    passmy_dog = Dog()type(my_dog) #__main__.Dog

上面程式碼定義了一個類別Dog,關鍵字使用class ,由於用於舉例因此加上pass關鍵字讓他快速跳過 。my_dog = Dog() 此段落是初始化Dog物件產生一個instance my_dog,此例子初始化由於pass 關係,將什麼也不做地產生instance ,我們可以透過type() 觀察可以得知my_dog型別為 Dog 的物件。

在Python中,class關鍵字命名慣例上沿襲PEP8 Code Style慣例:

Class Names

Class names should normally use the CapWords convention.

簡單說就是首字大寫。以上簡單的示範如何定義類別與產生物件,接下來將探討如何在類別中定義屬性(attribute)/行為(behavior)

Attribute in Python

關於attribute,可以很直觀的想像一個類別/物件擁有的屬性,或是相依於類別/物件的資訊。延續狗的例子,狗類別應該會有什麼資訊跟著?以下嘗試描述一個狗類別Dog可能的屬性:

class Dog():


# class object attribute
# same for any instance of a class
species = 'mammal'

def __init__(self, breed, name, spots):

self.breed = breed
self.name = name
# expected as boolean
self.spots = spots

程式中利用__init__這個特定的名稱的方法,定義類別(class)的實例(instance)建立之後,要進行的初始化動作。因此,我們可以把定義的屬性在__init__宣告並且賦值。上述程式碼也定義類別Dog應該要有breed, name, spots這三種屬性,分別定義這隻狗的品種、名字、以及是否有斑點。

此外較特別的是,根據需求,還可以定義類似global attribute的方式,讓所有的Dog擁有一個如常數般的屬性。以上例子就定義了species = ‘mammal’,意即所有狗應該都是哺乳類,也就是在產生物件時,直接擁有species屬性並且值為mammal。

self 關鍵字代表該 instance自身,類似於Java中的this,因此self.breed 就是instance 本身的屬性(attribute),而紅框breed參數則是初始化instance 時所賦的值。定義好屬性後,我們可以嘗試初始化Dog物件:

my_dog = Dog(breed=’Huskie’, name=’GG’, spots=True)my_dog.species # mammal
my_dog.breed # Huskie
my_dog.name # GG
...

上面程式碼將my_dog初始化後賦予對應值,Dog的物件因此生成,並擁有自己的屬性。與其他程式語言類似,利用,<instance_name>.<attribute_name>,可以取用自己instance 的屬性值 。

基礎的物件就這樣搞定了!擁有屬性、可被賦值。不過,似乎不能做什麼事情,因此我們要開始定義物件的行為,使物件能夠被使用或者是與其本身的屬性互動。

Actions/Behavior in Python

其實也可以稱為method,通常是一個類別中對於屬性值的增刪改查動作,或是改變物件值的狀態。延續Dog例子,所有的Dog應該都會吠叫,因此我們可以替Dog物件利用method定義行為:

class Dog():


# class object attribute
# same for any instance of a class
species = 'mammal'

def __init__(self, breed, name, spots):

self.breed = breed
self.name = name
# expected as boolean
self.spots = spots

# operation/actions --> method
def bark(self, number):
print('WOOF! My name is {} and the number is {}'.format(self.name, number))

一樣用self關鍵字作為此method的第一個參數,代表instance自身的行為。此外給一個參數number並且印出,因此我們可以重新初始化並且讓Dog instance動起來:

my_dog.bark(10)
# WOOF! My name is GG and the number is 10

那跟function有什麼不同? 一般而言,在class中的function,會被稱做method (真的很多名詞,覺得痛苦)

以上大致介紹了Python中class以及attribute的用法,作為未來繼續探究OOP的基礎。先建立物件後,物件間的互動以及關係將會後續文章繼續探索。

--

--

Young Chen
宅男雜誌

曾經是全端工程師,目前在資料科學團隊中主要負責雲端架構相關工作,透過自學正在資料科學領域相關知識耕耘中。mail: chiyoung0307@gmail.com