-2

I am searching for a class method which decides which arguments will be given when an instance of the class is given as an argument.

I have this:

class Answers_Matrix(list):

    def __setitem__(self, index, value):
        if (type(value) is int):
            if (0 <= value <= 255):
                list.__setitem__(self, index, value)
            else:
                print "Invalid value size."
        else:
            print "Invalid value type. Value must be an integer."

    def __repr__(self):
        # a function I made which returns a matrix in a string format
        return _matrix_to_string(self)

    # **EDIT:**
    # here I want a __asargument__ or something alike, so when an instance 
    # of this class is given as an argument I can decide what and how it 
    # will be given.

    # Example:
    # def __asargument__(self):
    #     array = (ctypes.c_ubyte*len(self))(*self)
    #     return array

Is there something alike in python which I can use?

4

1 回答 1

1

What you want is not possible. There is no way to say that when you call

foo(Answers_Matrix())

foo will actually receive some other thing derived from Answers_Matrix(). This is for good reason, as it would be incredibly confusing and difficult to implement. Particularly, it's very likely that you'd want to use self as an argument to something in the hypothetical __asargument__ method, and that'd lead to either infinite recursion or extremely confusing context-sensitive semantics for when __asargument__ is or isn't called.

If you want object A to be replaced with object B whenever you try to use it for anything, don't have object A in the first place. Just use object B.

于 2013-07-15T07:24:24.153 回答