我是新手使用类,我正在尝试将变量传递给我的类中的一个方法。我该怎么做?
这是我想要完成的一个例子:
class a_class():
def a_method(txt):
print txt
instance = a_class()
instance.a_method('hello world!)
P.S。我还不了解整个self
和__blah__
概念,如果我不必使用它们,我会在此时避免使用它们。
答案 0 :(得分:5)
在Python中为类编写实例方法时 - 看起来与您刚刚编写的内容完全相同 - 您无法避免使用self
。 Python中实例方法的第一个参数始终是调用该方法的对象。 self
不是Python中的保留字 - 只是第一个参数的传统名称。
引用official Python tutorial, chapter 9:
[...]关于方法的特殊之处在于对象作为函数的第一个参数传递。在我们的示例中,调用x.f()与MyClass.f(x)完全等效。通常,使用n个参数列表调用方法等效于使用通过在第一个参数之前插入方法对象而创建的参数列表来调用相应的函数。
因此,您需要为方法定义两个参数。第一个始终是self
- 至少这是传统名称 - 第二个是您的实际参数。所以你的代码片段应该是:
class a_class(object):
def a_method(self, txt):
print txt
instance = a_class()
instance.a_method('hello world!')
请注意,该类显式继承自object(我不确定空括号是否合法)。您也可以不提供继承,这对于大多数目的是相同的,但在类型系统的行为的某些细节上是不同的;来自object
的继承将a_class定义为新式类,而不是旧式类,这与大多数目的无关,但可能值得注意。
答案 1 :(得分:4)
你需要
class a_class():
def a_method(self,txt):
print txt
无论您使用什么变量名,类方法的第一个变量始终包含对象的引用。 (除非您将其用作静态方法)。
答案 2 :(得分:2)
实例Python中的方法必须提供实例(以self身份给出)作为方法签名中的第一个参数。
class a_class():
def a_method(self,txt):
print txt
这应该是你正在寻找的。此外,如果您要与成员变量进行交互,则需要执行以下操作:
class a_class():
name = "example"
def a_method(self,txt):
print txt
print self.name
答案 3 :(得分:0)
self
概念和__init__
的使用确实不会令人困惑,编写优秀的Python代码至关重要。在实例化类时调用__init__
,并在每个类方法中只包含一个self
参数,然后可以使用self
来引用类的实例。
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!"