【发布时间】:2018-07-28 16:49:02
【问题描述】:
这里是一位经验丰富的 VBA 程序员,正在开始深入研究 Python OOP。我担心它是如此简单,以至于我在不寻求帮助的情况下找到答案时遇到了问题。
我写了以下代码:
#Import packages
import openpyxl as xl
import os
class DataExtract:
#Initialize the class
def __init__(self,wb):
self.wb = wb
#Set class method to return sheet for named range
@classmethod
def rng_sht(cls,dest):
for title, coord in dest:
return(title)
#Set class method to return cell for named range
@classmethod
def rng_coord(cls,dest):
for title, coord in dest:
return(coord)
#Set class method to retun value of named range
@classmethod
def rng_val(cls,rng):
#Define destinations
dest = wb.get_named_range(rng).destinations
#Retrieve sheet
sht = DataExtract.rng_sht(dest)
coord = DataExtract.rng_coord(dest)
#Return value
return()
#Define workbook
wb = 'Test_WB'
#Initiate class
wb_cur = DataExtract(wb)
#Find temp for current sheet
Temp = wb_cur.rng_val('Temp')
我知道我的缩进不正确。
我遇到的问题是,当我调用 rng_val 类方法时,它只返回我在其中调用的第一个方法(在本例中为“sht”)的当前值。当我停用“sht”行时,“coord”行正常工作。
我怀疑这个问题可能是由于我如何调用类方法或我如何构建类,但我不确定。
更新
我已经根据大家的反馈更新了代码,下面是我的脚本。我在退出 rng_val 类中的循环时仍然遇到错误,Max 建议 yield 解决。我试图修复无济于事。
#Import packages
import openpyxl as xl
import os
class DataExtract:
#Initialize the class
def __init__(self,wb):
self.wb = wb
#Set class method to return sheet for named range
@classmethod
def rng_sht(cls,dest):
for title, coord in dest:
return title
#Set class method to return cell for named range
@classmethod
def rng_coord(cls,dest):
for title, coord in dest:
return coord
#Set class method to retun value of named range
@classmethod
def rng_val(cls,wb,rng):
#Define destinations
dest = wb.get_named_range(rng).destinations
#Retrieve sheet
sht = cls.rng_sht(dest)
coord = cls.rng_coord(dest)
print(sht)
print(coord)
#Return value
return 1
path = 'C:\\Users\\User\\Desktop\\Python\\PracFiles\\'
#Loop through workbooks in a given folder
for i in os.listdir(path):
#Define workbook
wb = xl.load_workbook(path + i,data_only=True)
#Find temp for current sheet
Temp = DataExtract.rng_val(wb,'Temp')
【问题讨论】:
-
如果您知道 - 为什么不修复它?
-
复制时出现缩进问题。鉴于代码的简单性,我不怀疑任何人会遇到任何问题。
-
但是如果我们试图重现您的问题,那么我们必须纠正缩进,因为您不会被打扰。
-
好吧,下一个 python 新手发现这个问题与你的问题似乎也是他的问题 - 也许重新访问 how to ask 和 mvce,Python 需要缩进并且没有它会引入更多错误在我们必须修复的代码中。
-
在
rng_val中,您在循环中有一个return,这会导致循环在第一次迭代期间退出。您可能想看看yield关键字。
标签: python python-3.x class oop methods