因此,为了学习OOP编程,我们在构建类中担负任务。这些类应允许我们通过终端获取input()。像“输入'a'”一样获得所有书籍的清单。
这是我的第一种方法,它不起作用。它应该不带任何参数,也不需要任何参数,因为有一个列表要读取。
所以我的代码如下:
from Library import *
while(True):
print("blabla explaining how to use the program, do you want to 'a', print a list of all books, 'b'.....")
user_choice = input
if(user_choice == 'a'):
Library.list_books()
if(user_choice == 'b'):
#etc.
库方法如下:
from Book import *
def list_books(self):
for Book.Book in Book.book_list:
print(Book.Book.name)
如您所见,它实际上并不需要任何功能。那么为什么要一个参数呢。显然,如果我删除“自我”将起作用,但是据我所知,这不是常规的。我发现的唯一解决方法是添加@classmethod。我的老板虽然不赞成,但称其为作弊。
可能是,我还没有完全了解“自我”的作用,但就目前而言,我所知道的是,它不起作用,而且我没有想法。我仍在研究它,但要么我太愚蠢,要么是资料来源没有很好地向我解释它。我刚刚进行Python编程已有2周之久,并且具有非常熟练的Java技能,所以我的一般编程知识仍然很有限。如果您有任何资料可以很好地解释它或对您有帮助,我将很高兴阅读它们。
谢谢!
答案 0 :(得分:1)
self
参数通常由IDE自动添加到方法中。它主要在方法包含在类内部时使用。
例如下面的Book
类。
class Book:
author = ""
title = ""
def __init__(self, author, title):
self.author = author
self.title = title
def print_book_information(self):
print("'%s' by %s" % (self.title, self.author))
由于您只是从OOP入手,因此很多事情都会让人感到困惑。首先,我们声明类类型Book。
class Book:
接下来的两行声明与Book类关联的变量。在这种情况下,我们要存储书籍的author
和书籍的title
。
author = ""
title = ""
如果您注意到,接下来的两个函数都有一个self
参数。参数self
引用您所创建的书。所以如果我像这样创作一本书:
my_book = Book('Ayn Rand', 'Atlas Shrugged')
它将执行__init__
方法,该方法将为我们的特定书籍设置author
和title
的值。
self.author = author # Sets our author to be 'Ayn Rand'
self.title = title # Sets our title to be 'Atlas Shrugged'
现在我们的班级完成了,我们可以做类似
的事情>>> my_book.print_book_information()
'Atlas Shrugged' by Ayn Rand
方法print_book_information
中的通知我们如何使用单词self
来引用我们的作者和标题? self
本质上允许该方法知道您正在看哪本特定的书。否则,该方法将不知道您要哪一本书的书名或作者。
此外,在您提到的问题中,您具有非常温和的Java背景。 self
执行与Java中的this
关键字类似的功能,不同之处在于您必须将其作为Python中的参数包括在内,而不必在Java中的参数中对其进行引用。以下两种方法基本相同:
# Python
class Hello:
def say_hello(self):
print("Hello!")
// Java
public class Hello
{
public void say_hello()
{
System.out.println("Hello!");
}
}
在Java中可能是一两个拼写错误,在过去的五年左右的时间里没有使用过。