Kurda Yon a écrit :
On Jul 1, 5:01 pm, "[EMAIL PROTECTED]"
<[EMAIL PROTECTED]> wrote:
On 1 juil, 22:43, Kurda Yon <[EMAIL PROTECTED]> wrote:



Hi,
I have a class called "vector". And I would like to define a function
"dot" which would return a dot product of any two  "vectors". I want
to call this function as follow: dot(x,y).
Well, I can define a functions "dot" outside the class and it works
exactly as I want. However, the problem is that this function is not
associated with the class (like methods a method of the class).
For example, if I call "x.calc()" or "y.calc()", python will execute
different methods if "x" and "y" belongs to different classes. I want
to have the same with my "dot" function. I.e. I want it calculates the
dot product ONLY IF the both arguments of that function belong to the
"vector" class.
Is it possible?
You don't need to make dot() a method of your Vector class to have
this behaviour, and making it a method of the Vector class isn't
enough to have this behaviour.

The simplest solution would be:

class Vector(object):
    def dot(self, other):
        if not isinstance(other, type(self)):
            raise TypeError("can only calculate the dot product of two
vectors")
        # do the job here and return what's appropriate

Now since it's a binary operator, you might as well implement it as
such:

class Vector(object):
    def __mul__(self, other):
        if not isinstance(other, type(self)):
            raise TypeError("can only calculate the dot product of two
vectors")
        # do the job here and return what's appropriate

Then use it as doproduct = vector1 * vector2

HTH

As far as I understood, In the first case, you gave,  I need to call
the function as follows "x.dot(y)". In the second case I need to call
the function as follows "x*y". But I want to call the function as
follows "dot(x,y)".

I tought you could figure it out by yourself from the above examples.


By the way, "type(self)" returns the name of the class to which the
"self" belongs?

Nope, it returns the class object (for new-style classes at least).

Does "instance"  return "true" if the first argument belongs to the
class whose name

Python's classes are objects. type() returns a class object (or a type object for old-style classes IIRC), and isinstance() takes a class or style object (or a tuple of class / type objects) as second argument.

is given in the second argument?

isinstance() is documented, you know ? As well as type() FWIW. What about first looking up the fine manual, then come back if there's something you have problem with ?-)
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to