ถามหน่อยครับ ถ้าผมอยากจะให้ constructor รับตัวแปรเป็น function แล้วฟังก์ชั่นที่ว่าเรียกใช้ตัวแปรในตัวมันเองได้จะทำอย่างไรดีครับ

ตอนนี้ผมลองอยู่ประมาณนี้

class A():
    def __init__(self,function):
        self.a = 1
        self.b = 2
        self.function = function
 
def func(self):
    print self.a
    print self.b

-----------------------------------
แล้วก็ลองสั่ง
a = A(func)
a.function()

แล้วก็ error บอกว่าจำนวน argument ไม่ตรง (ต้องการหนึ่ง...)

พอลองใหม่ใช้ฟังค์ชั่นนี้เป็น argument แทน..

def func():
    print self.a
    print self.b

แทนคราวนี้เจอ global name self is not defined..

ไม่ทราบว่าผมจะทำอย่างไรดีครับ ให้มันรับ function แล้วใช้ตัวแปรใน object ได้..

แล้วลองสร้าง object ลองเอา func() ไปใส่ใน object ของ A ดูปรากฏว่าเรียกไม่ได้..

veer's picture

งั้นดูนี่ก่อนดีกว่า http://blog.vee-u.com/2008/02/17/blockcode/
---
http://blog.vee-u.com/

ไม่ indent แล้วหน้ามืดตาลายคล้ายจะเป็นลม

sugree's picture

น่าจะหมายถึงแบบนี้

#!/usr/bin/env python
 
import new
 
class A():
    def __init__(self,function):
        self.a = 1
        self.b = 2
        self.function = new.instancemethod(function, self, self.__class__)
 
def func(self):
    print self.a
    print self.b
 
a = A(func)
a.function()

อย่างนี้ได้หรือเปล่า?

class A:
    def __init__(self,f):
        self.a = 1
        self.b = 2
        self.f = f
    def function(self):
        self.f(self)
 
def func(self):
    print self.a
    print self.b
 
a = A(func)
a.function()

อาจไม่ตรงเสียทีเดียว แต่เข้าใจง่าย (มั้ง)

ครับ ลองแก้แล้วครับ ---- ---'' ขอบคุณคุณ cwt กับ veer ครับที่ช่วยติ

แล้วก็ขอบคุณคุณ sugree อีกครั้งครับ. จะรีบไปลอง google ดูเจ้า module new นี่

veer's picture

ผมไม่ได้ติอะไรนะ :-P. แค่เอาวิธีใช้ blockcode มาบอกเองนะ ลอล.
---
http://blog.vee-u.com/

^
อ่า ผมไม่ได้ซีเรียสหรอกครับ ~

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น