开发者

Passing a variable to a method in a class

开发者 https://www.devze.com 2023-01-28 14:20 出处:网络
I\'m new to using classes and I\'m trying to pass a variable to one of the methods inside of 开发者_如何学JAVAmy class. How do I do it?

I'm new to using classes and I'm trying to pass a variable to one of the methods inside of 开发者_如何学JAVAmy class. How do I do it?

Here's an example of what I'm trying to accomplish:

class a_class():
     def a_method(txt):
          print txt

instance = a_class()
instance.a_method('hello world!)

P.S. I don't understand the whole self and __blah__ concepts yet, and I will avoid them at this point if I don't have to use them.


When writing an instance method for a class in Python- which looks exactly like what you've just coded up- you can't avoid using self. The first parameter to an instance method in Python is always the object the method is being called on. self is not a reserved word in Python- just the traditional name for that first parameter.

To quote from the official Python tutorial, chapter 9:

[...] the special thing about methods is that the object is passed as the first argument of the function. In our example, the call x.f() is exactly equivalent to MyClass.f(x). In general, calling a method with a list of n arguments is equivalent to calling the corresponding function with an argument list that is created by inserting the method’s object before the first argument.

Therefore, you need to define two parameters for your method. The first is always self- at least that is the conventional name- and the second is your actual parameter. So your code snippet should be:

class a_class(object):
    def a_method(self, txt):
        print txt

instance = a_class()
instance.a_method('hello world!')

Note that the class explicitly inherits from object (I'm not sure empty parentheses there are legal). You can also provide no inheritance, which is identical for most purposes, but different in some details of the behavior of the type system; the inheritance from object defines a_class as a new-style class rather than an old-style class, which is irrelevant for most purposes but probably worth being aware of.


You need to have

class a_class():
    def a_method(self,txt):
        print txt

The first variable of a class method always contains a reference to the object no matter what variable name you use. (Unless you are using it as a static method).


Instance Methods in Python must be provided the instance (given as self) as the first parameter in the method signature.

class a_class():
     def a_method(self,txt):
          print txt

That should be what you're looking for. Additionally, if you were to interact with a member variable you'd want to do something like this:

class a_class():
     name = "example"
     def a_method(self,txt):
          print txt
          print self.name


The self concept and the use of __init__ really isn't that confusing and it is essential to writing good Python code. __init__ is called on instantiation of a class, and simply include a self parameter in every class method, you can then use self to reference the instance of the class.

class a_class():
    def __init__(self):
        self.count = 0

    def a_method(self, txt):
        self.count += 1
        print str(self.count), txt

instance = a_class()
instance.a_method('hello world!')
# prints "1 hello world!"
instance.a_method('hello again!')
# prints "2 hello again!"
0

精彩评论

暂无评论...
验证码 换一张
取 消