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