python新手尝试学习OOP
我是python和编程新手。我正在编写一个脚本,学习如何将列表变量从一个类传递到另一个类。代码见附件。我不确定如何将列表从URL类传递到createRules类python新手尝试学习OOP,python,list,class,variables,Python,List,Class,Variables,我是python和编程新手。我正在编写一个脚本,学习如何将列表变量从一个类传递到另一个类。代码见附件。我不确定如何将列表从URL类传递到createRules类 import csv, sys, time from urlparse import urlparse, urlsplit, urlunsplit class URL(): """ Function parses out urls to get needed parts""" def processUrl(self
import csv, sys, time
from urlparse import urlparse, urlsplit, urlunsplit
class URL():
""" Function parses out urls to get needed parts"""
def processUrl(self):
fromUrlArr = [[], [], [], []]
dstUrlArr = [[], [], [], [], []]
markets = []
with open('Redirects.csv') as csvfile:
readCSV = csv.reader(csvfile, delimiter=',')
for row in readCSV:
from_url = urlparse(row[0])
dst_url = urlparse(row[1])
path = dst_url.path.split('/')[2:]
dst_path = '/'.join(path)
market = from_url.path.split('/')[1]
fromUrlArr[0].append(from_url.scheme) # I want to use the following list in the class below
dstUrlArr[0].append(dst_url.scheme)
fromUrlArr[1].append(from_url.netloc)
dstUrlArr[1].append(dst_url.netloc)
fromUrlArr[2].append(from_url.path)
dstUrlArr[2].append(dst_path)
fromUrlArr[3].append(from_url.query)
dstUrlArr[4].append(market)
dstUrlArr[3].append(dst_url.query)
class Rule():
def createRules():
# ticket = str(sys.argv[1])
# user = str(sys.argv[2])
# today = time.strftime("%Y-%m-%d")
你可以把它当作论点来通过。在Python中,所有对象类型都是通过引用传递的。因此,您需要稍微更改
createRules()
的定义。我假设您打算将它用作工厂函数并在类上调用它,因此需要创建一个类方法
@classmethod
def createRules(cls, myList):
# do stuff
然后,您可以通过这样调用它来传递列表
someList = [1, 2, 3]
rules = Rule.createRules(someList)
一般来说,你能做的是
class A:
def func(self):
list1 = ['a']
list2 = ['b']
list3 = ['c']
return list1, list2, list3
class B:
def newfunc(self):
func_results = A().func()
loaded_list1 = func_results[0]
loaded_list2 = func_results[1]
loaded_list3 = func_results[2]
对于您的示例,这看起来像:
import csv, sys, time
from urlparse import urlparse, urlsplit, urlunsplit
class URL():
""" Function parses out urls to get needed parts"""
def processUrl(self):
with open('Redirects.csv') as csvfile:
readCSV = csv.reader(csvfile, delimiter=',')
for row in readCSV:
from_url = urlparse(row[0])
dst_url = urlparse(row[1])
path = dst_url.path.split('/')[2:]
dst_path = '/'.join(path)
market = from_url.path.split('/')[1]
fromUrlArr[0].append(from_url.scheme) # I want to use the following list in the class below
dstUrlArr[0].append(dst_url.scheme)
fromUrlArr[1].append(from_url.netloc)
dstUrlArr[1].append(dst_url.netloc)
fromUrlArr[2].append(from_url.path)
dstUrlArr[2].append(dst_path)
fromUrlArr[3].append(from_url.query)
dstUrlArr[4].append(market)
dstUrlArr[3].append(dst_url.query)
return fromUrlArr, dstUrlArr, markets
class Rule():
def createRules(self):
func_results_to_load = URL().processURL()
fromUrlArr = func_results_to_load[0]
dstUrlArr = func_results_to_load[1]
market = func_results_to_load[2]
# ticket = str(sys.argv[1])
# user = str(sys.argv[2])
# today = time.strftime("%Y-%m-%d")
print dstUrlArr[4][2]
规则=规则()
rule.createRules()我不明白为什么人们会投票反对。这是合法的question@Nemo:可能是因为这是本网站的一个离题问题。尼莫,我也很困惑我的问题在本网站上是如何离题的。谢谢大家的帮助。尼莫,我现在确实可以用了。这几天我都快发疯了。我是python的新手。实际上是第一次尝试。在URL类中,列表由一个文件填充,该文件包含from URL和to URL,我正在解析创建apache重写规则所需的内容。在createRules类中,我希望获取这些列表并处理它们以生成规则。我知道有点奇怪,但这是我第一次尝试写OOP,我有脚本工作程序。希望这有助于澄清我在做什么。不过,你的使用不会改变如何通过列表。看起来您有3个列表,因此需要添加三个参数。这实际上与OOP没有任何关系。你需要熟悉基本的函数编写。尼莫谢谢你的帮助。我基本上有你所说的,但我不确定如何创建实例。基本上在这一点上,我想打印规则类中列表的值。我试过了。rule=rule()rule.createRules()但我得到了TypeError:createRules()不接受任何参数(给定1个),您需要使用参数“self”定义createRules。此外,如果类定义为Rule(),则需要保持大小写一致。因此,请尝试rule=rule(),然后尝试rule.createRules(),它将为我提供func_results=URL()。processURL()AttributeError:URL实例没有属性“processURL”,您可以将上面的代码编辑为现在的代码吗?你的URL类中定义的processURL函数是self(processURL(self))的函数吗?尼莫,我现在让它工作了。谢谢你们的帮助,我对这个网站和python还不熟悉。谢谢