python新手尝试学习OOP

2024-09-28 21:41:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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):
        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")

Tags: csvpathfromurl列表sysclassdst
2条回答

你会把它当作一个论点。在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=规则() rule.createRules创建规则()

相关问题 更多 >