default agrument มีประโยชน์ในการกำหนดค่าปริยายให้กับตัวแปรที่ส่งผ่านไปให้ฟังก์ชั่น
ขอยกตัวอย่างเป็นคลาสแทน
>>> class X: ... def __init__(self, a=1, b=2): ... self.a = a ... self.b = b ... print "X.a=%s, X.b=%s" % (self.a, self.b) ... >>> x = X() X.a=1, X.b=2 >>> x = X(11) X.a=11, X.b=2 >>> x = X(a=111) X.a=111, X.b=2 >>> x = X(b=222) X.a=1, X.b=222
ตัวแปร a และ b เป็นตัวแปรที่เป็น default argument
การสืบทอดคลาสมักนิยมใช้รูปแบบอาร์กิวเมนต์เป็น *argv **keyw
เพื่อหลีกเลี่ยงการกำหนดอาร์กิวเมนต์ใหม่
โดยไพธอนจะแทนอาร์กิวเมนต์ที่ต้องกำหนดค่าให้ด้วยตัวแปร argv เป็นข้อมูลชนิด tuple
และแทนอาร์กิวเมนต์ที่มีค่าปริยายกำหนดไว้แล้วด้วยตัวแปร keyw เป็นข้อมูลชนิด dictionaries
เช่น
class Y(X):
def __init__(self, *argv, **keyw):
self.__parent = X
self.__parent.__init__(self, *argv, **keyw)
ตัวแปรทั้งหมด จะส่งผ่านไปให้คลาส X
เราสามารถดักและเปลี่ยนแปลงค่าในอาร์กิวเมนต์ได้ ดังนี้
>>> class Y(X):
... def __init__(self, *argv, **keyw):
... if keyw.has_key("a") and keyw["a"] > 111: keyw["a"]=111
... self.__parent = X
... self.__parent.__init__(self, *argv, **keyw)
...
>>> y = Y()
X.a=1, X.b=2
>>> y = Y(a=999999)
X.a=111, X.b=2