我有一个生成数据的类:
class dataGen():
#class to generate data.
def firstName():
firstName = 'Storm' + str(timeGen.timeGen())
return firstName
def lastName():
lastName = 'Trooper' + str(timeGen.timeGen())
return lastName
def randString():
rint = random.randint(1,20)
r4ndString = ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(rint))
return r4ndString
def email():
EmailA = dataGen.randString()
EmailB = dataGen.randString()
items = ['.com','.net','.org']
tld = random.choice(items)
return str(EmailA) + '@' + str(EmailB) + str(tld)
def empid(size=20, chars=string.ascii_uppercase + string.ascii_lowercase + string.digits):
return ''.join(random.choice(chars) for _ in range(size))
def ssnGen():
ssnGenD = random.randint(100000000,999999999)
return ssnGenD
发出SQL调用的类:
^{pr2}$…我有一个类根据SQL查询的结果调用它。在
^{3}$我的主回路
def main():
datagenInstance = dataGen()
SQLConnInstance = sqlConn()
CLIENT, filename, FILESTRUCT = selectFile()
PARSED = parse(filename)
HOLDERLIST = holderClass(PARSED, FILESTRUCT)
deIDedData = deID(HOLDERLIST)
deIDedFile = merge(PARSED, deIDedData, FILESTRUCT)
fileExport(filename, deIDedFile)
if __name__ == '__main__':
main()
HOLDERLIST只是一个CSV文件,它被解析为4个字符串的列表。我遇到的问题是,SQL连接类和dataGen类不是每次都进行新的调用。每次循环运行时,它都应该为前面提到的两个类创建一个新实例。我知道在像c#和c++这样的语言中,我可以在调用的前面加上new,以强制语言在每次被调用时都创建一个新实例。我读过关于在python中使用new之类的东西的文献,但是这些东西似乎被放在类声明中,我对python的类修饰并不是很了解。在
似乎您对Python中的类不太熟悉。您已经创建了两个只包含类方法而不包含实例属性的类。要将您的
dataGen
类更新为基于实例,您可以使用类似以下内容:当一个类的实例被创建时,
^{pr2}$__init__
函数被调用并被用来实例化类(这通常意味着设置实例属性)。所有实例方法都隐式传递参数self
,这是类的实例。decoratorstaticmethod
重写此行为,当调用这些方法时,不会隐式传递任何参数。创建实例并访问其属性是直接的。在但是,当您在主循环中创建
datagenInstance
时,它不会在任何地方使用。您需要将它传递给相关函数。很难提供比这更多的指导,因为您可能需要重新构造许多代码。This link可以帮助您更好地解释类。在相关问题 更多 >
编程相关推荐