这里是一位经验丰富的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\u val类方法时,它只返回我在其中调用的第一个方法的当前值(在本例中为“sht”)。当我停用“sht”行时,“coord”行正常工作。你知道吗
我怀疑这个问题可能是由于我是如何调用类方法或者我是如何构造类的,但是我不确定。你知道吗
我已经用你们所有人的反馈更新了代码,下面是我的脚本。我在退出rng\u 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-OO缺乏经验有关。你知道吗
return
语句后面不能有括号。这将导致函数返回一个空元组而不是空元组。你知道吗return coord
。return
本身将退出函数。你知道吗任何类方法中的第一个参数都包含通过对象调用时该类的实例。在构造函数中调用它
self
,在其他方法中调用它cls
。它们是一样的。你还没有在你的代码中使用它,在它看起来应该是的地方。见下表:这将调用函数
rng_sht
静态地传递dest
作为DataExtract
的实例,我几乎可以肯定这是不需要的。您应该改为使用cls.rng_sht(dest)
来引用对象实例。此外,您不能仅通过引用类字段本身来访问类字段,例如wb.get_named_range(rng)
,其中wb
是DataExtract
中的字段。而是通过cls
引用它,比如cls.wb.get_named_range(rng)
相关问题 更多 >
编程相关推荐