目錄
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...