我正在研究一个Python项目,当用户输入视频名称时,该项目会下载YouTube视频。我从未与班级合作,这是我的第一次,实际上我是从Python书中学到的关于类,函数以及所有内容的信息,但是当我尝试在实际项目中使用它时,我感到非常困惑。这是我的代码:
import pytube
import urllib.request
import urllib.parse
import re
class YouTubeDownloader:
def __init__(self):
self.user_music = self.userInput()
# Ask user what video they want to download
def userInput(self):
print("Please type such as: Chopin Nocturne No 9 op 5")
subject = input("What video do you want to download in YouTube?")
return subject
# Search the youtube video with what user type
def searchYoutube(self, subject):
query_string = urllib.parse.urlencode({"search_query": subject})
html_content = urllib.request.urlopen("http://www.youtube.com/results?" + query_string)
search_results = re.findall(r'href=\"\/watch\?v=(.{11})', html_content.read().decode())
finalURL = "http://www.youtube.com/watch?v=" + search_results[0]
return finalURL
# Download the first video
def downloadVideo(self, finalURL):
youtube = pytube.YouTube(finalURL)
video = youtube.streams.first()
video.download('C:/Users/Muffin/Downloads')
if __name__ == '__main__':
user = YouTubeDownloader()
所以在这里:
self.user_music
,如果需要,为什么需要它?除了self之外,我没有将任何东西传递给__init__
,是否有必要? subject
中的函数def userInput
中的def searchYoutube
变量,变量会自动传递给该类中的不同函数吗?self.user_music
,因此,根据您提供的代码段,您无需定义它。如果没有将任何内容传递给__init__
,并且在对象实例化期间不需要进行任何自定义初始化,则无需定义构造函数(__init__
),因为Python会为您提供默认的构造函数。] >subject
的值,则需要将其作为参数传递给可能要使用它的所有其他函数或方法。您可以将其转换为实例属性:self.subject = 'whatever'
,并在需要时使用它;在这种情况下,您不需要传递它。