我是python的新手,我必须学习的更难的事情之一是如何正确使用自我。我的理解是我们应该使用自己的方法。但是我有一个方法的下面的类,我得到一个类型错误说我错过了位置参数self。
class example():
list1 = ['a','b','c','d']
list2 = ['1','2','3','4']
def func1(self, list1, list2):
i = 1
for item in list1:
print(list1)
print(list2[i])
i +=1
func1(list1=list1, list2=list2)
#error seen below
<ipython-input-2-d17d317756a0> in <module>()
----> 1 class example():
2
3 list1 = ['a','b','c','d']
4 list2 = ['1','2','3','4']
5
<ipython-input-2-d17d317756a0> in example()
11 print(list2[i])
12
---> 13 func1(list1=list1, list2=list2)
TypeError: func1() missing 1 required positional argument: 'self'
答案 0 :(得分:1)
您定义为func1
的功能是method。哪个需要在该类的实例上使用。如,
abc = example() # We create the instance
abc.func1() # This is how you call a method.
self
代表abc
。
如果你打算在课堂上调用它,你需要使用self本身,如果在外面调用,它将替换为实例名称。
Class example():
def func1(self):
#stuff
def func2(self):
self.func1() # This is the usage.
编辑:在这种情况下,您可以使用静态方法。
class example():
def func1():
pass
func1()
但是你应该意识到这并不比创建一个全局函数好多少。所以我建议你找到一种方法来使用我推荐的第一种方式。
答案 1 :(得分:0)
如果您尝试在课堂外拨打func1
:
class Example():
def func1(self, list1, list2):
i = 0
for item in list1:
print(item)
print(list2[i])
i +=1
list1 = ['a','b','c','d']
list2 = ['1','2','3','4']
a = Example()
a.func1(list1,list2)
如果您尝试在班级中使用func1
的功能:
class Example():
list1 = ['a','b','c','d']
list2 = ['1','2','3','4']
def func1(self):
i = 0
for item in self.list1:
print(item)
print(self.list2[i])
i +=1
a = Example()
a.func1()
或者,如果您的列表长度相同,则您的func可以是:
def func1(self, list1, list2):
for i in range(len(list1)):
print(list1[i])
print(list2[i])
答案 2 :(得分:-1)
我不是蟒蛇专家,但请尝试以下它可能对你有帮助,
class example():
list1 = ['a','b','c','d']
list2 = ['1','2','3','4']
def func1(list1, list2):
i = 1
for item in list1:
print(list1)
print(list2[i])
i +=1
func1(list1=list1, list2=list2)