2017-05-17

用 Python namedtuple 快速定義 class

在 Python 定義一個 class,需要一些囉唆的基本工作。
class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author
    def __str__(self):
        return 'Book(title=\'' + self.title +'\', author=\'' + self.author + '\')'

b = Book('Python Vol.2', 'Jet')
print(b) # Book(title='Python Vol.2', author='Jet')
print(b.title, b.author) # Python Vol.2 Jet
透過 namedtuple 來定義一個 class 只要一行 code,而且可以用 [N] 取用欄位。
Book = namedtuple('Book', ['title', 'author'])

b = Book('Python Vol.3', 'Swan')
print(b) # Book(title='Python Vol.3', author='Swan')
print(b.title == b[0]) # True
print(b.author == b[1]) # True
t, a = b
print(t, 'by', a) # Python Vol.3 by Swan
也可以透過繼承來增加自訂的 method。
class Ebook(Book):        
    def format(self):
        return self.title + ', ' + self.author

b = Ebook('Python Vol.4', 'Queen')
print(b) # Ebook(title='Python Vol.4', author='Queen')
print(b.format()) # Python Vol.4, Queen
但有一些限制。
  • 最大的一點是 immutable,因為 namedtuple 是建立一個 tuple 的 subclass,所以在建立後不能改值。
  • 就算是透過繼承,也不能再增加新的欄位定義。

官方文件
---
---
---

沒有留言:

張貼留言