讀書筆記 深入理解Python特性(三)

2021-09-27 03:18:07 字數 1850 閱讀 3783

目錄

1. 物件轉換為字串

2. 淺複製和深複製

3. 用抽象基類避免繼承錯誤

4. namedtuple

class base:

def foo(self):

raise notimplementederror()

def bar(self):

raise notimplementederror()

class concrete(base):

def foo(self):

return 'foo() called'

# 忘記過載bar()了

# def bar(self):

# return 'bar() called'

這種方法有兩個問題:1. 例項化base不會報錯;2.例項化concrete不會報錯,只有呼叫缺失的bar方法才會報錯

使用abc模組來定義抽象基類可以解決這個問題

from abc import abcmeta, abstractmethod

class base(metaclass=abcmeta):

@abstractmethod

def foo(self):

pass

@abstractmethod

def bar(self):

pass

class concrete(base):

def foo(self):

pass

# 忘記過載bar()了

# def bar(self):

# return 'bar() called'

例項化concrete會報錯:

>>> c = concrete()

typeerror:

"can't instantiate abstract class concrete

with abstract method bar"

from collections import namedtuple

car = namedtuple('car', ['color', 'mileage'])

my_car = car('red', 113465)

ur_car = car(color='blue', mileage=1.3)

print my_car.color # 'red'

print ur_car.mileage # 1.3

方法擴充套件

from collections import namedtuple

car = namedtuple('car', ['color', 'mileage'])

# 新增新方法和屬性

class mycar(car):

def hexcolor(self):

if self.color == 'red':

return '#ff0000'

else:

return '#000000'

上面的子類雖然可以通過self.property的方法新增屬性,但是不會出現在tuple的屬性列表裡面,要擴充套件tuple屬性必須使用基類元組的_fields方法:

from collections import namedtuple

car = namedtuple('car', ['color', 'mileage'])

mycar = namedtuple('mycar', car._fields + ('charge',))

《深入理解Python》讀書筆記

1 type函式返回任意物件的資料型別。type可以接收任何東西作為引數 整型 字串 列表 字典 元組 函式 類 模組 甚至型別物件,並返回它的資料型別。可以使用types模組中的常量來進行物件型別的比較。import mymodule import types type mymodule type...

《深入理解Python特性》讀書筆記

深入理解python特性 的讀書筆記 單前導下劃線 var 單末尾下劃線 var 雙前導下劃線 var 雙前導雙結尾下劃線var 單獨乙個下劃線 物件可以被當作函式使用,只要他實現了 call 方法 函式預設返回值為none,即所有函式都是有返回值的,不寫就是nonelambda x x 1表示就是...

讀書筆記 深入理解Python特性(一)

目錄 1.斷言 2.可維護性建議之逗號的放置 3.上下文管理器和with 4.下劃線 雙下劃線及其他 names alice bob dilbert 而不是names 一行定義,或者 names alice bob dilbert 始終堅持多行定義並且在末行放置逗號,這樣在git diff或者別人r...