我正在使用方法工厂动态地将函数分配给类,如下所示:
def method_man(cls):
items = ['spam', 'eggs', 'bacon']
for item in items:
def method(cls):
return 'Here are your {}'.format(item)
setattr(cls, item, classmethod(method))
return cls
@method_man
class DinnerTime(object):
pass
然而,方法setattr()
似乎没有分配函数,而是似乎在为每个迭代时修改的method
的内存位置分配一个指针:
In [52]: DinnerTime.bacon()
Out[52]: "Here's your bacon"
In [53]: DinnerTime.eggs()
Out[53]: "Here's your bacon"
In [54]: DinnerTime.spam()
Out[54]: "Here's your bacon"
如何正确分配功能,以便在以后的迭代中不会覆盖它?
method_man
循环中使用函数工厂吗?答案 0 :(得分:0)
道歉,我在发布后几秒钟就意识到了问题:功能工厂解决了这个问题。我把我的解决方案放在这里帮助其他人做类似的事情。
出现混乱是因为我已经有一个def function_creator(item):
def method(cls):
return "Here's your {}".format(item)
return method
工厂,并没有意识到我仍然需要在赋值循环中使用函数工厂:
def method_man(cls):
def function_creator(item):
def method(cls):
return "Here's your {}".format(item)
return method
items = ['spam', 'eggs', 'bacon']
for item in items:
method = function_creator(item)
setattr(cls, item, classmethod(method))
return cls
@method_man
class DinnerTime(object):
pass
然后代码变成
In [56]: DinnerTime.spam()
Out[56]: "Here's your spam"
In [57]: DinnerTime.eggs()
Out[57]: "Here's your eggs"
In [58]: DinnerTime.bacon()
Out[58]: "Here's your bacon"
输出正确:
EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML,N'<root xmlns:n="omlNamespace" />'
insert into lanehistory
SELECT * FROM OPENXML (@hDoc,'/n:LaneHistory/n:Lane/n:Results/n:ResultPerGrade/n:WeightLimit', 2)
WITH
(
MachineNumber [varchar](7) '../../../../n:FileProperties/n:MachineNumber',
StartDateTime [varchar](25) '../../../n:General/n:StartDateTime',
StopDateTime [varchar](125) '../../../n:General/n:StopDateTime',
LaneNumber [varchar](6) '../../../n:General/n:LaneNumber',
ExternalIdentification [varchar](30) '../../../n:Supply/n:ExternalIdentification/n:ID1',
FlkName [varchar](30) '../../../n:Supply/n:Property/n:Name',
FlkNumber [varchar](10) '../../../n:Supply/n:Identification/n:TraceCode2',
UKCode [varchar](10) '../../../n:Supply/n:Identification/n:TraceCode1',
ProductName [VarChar](30) '../../../n:Product/n:Property/n:Name',
PRoductType [VarChar](30) '../../../n:Product/n:Property/n:Type',
Package [VarChar](30) '../../../n:Product/n:Property/n:PackageName',
EggsPerLane [varchar](6) '../n:Count',
EggsGraded [FLOAT] '../../../n:Supply/n:Operation/n:AmountOfEggs',
EDescription [VarChar](30) '../n:Description',
EWeight [VarChar](30) '../n:Weight',
MinWeight [VarChar](30) '../n:WeightLimit/n:MinWeight',
MaxWeight [VarChar](30) '../n:WeightLimit/n:MaxWeight',
ExtraInfo1 [VarChar](20) '../../../n:Supply/n:Extra/n:Info1',
ExtraInfo2 [VarChar](20) '../../../n:Supply/n:Extra/n:Info2',
ExtraInfo3 [VarChar](20) '../../../n:Supply/n:Extra/n:Info3',
ExtraInfo4 [VarChar](20) '../../../n:Supply/n:Extra/n:Info4',
ExtraInfo5 [VarChar](20) '../../../n:Supply/n:Extra/n:Info5',
ShedNo [VarChar](6) '../../../n:Supply/n:Egg/n:ShedNumber',
ShedType [VarChar](30) '../../../n:Supply/n:Egg/n:Type',
LayDate [VarChar](12) '../../../n:Supply/n:Dates/n:LayDate',
SupplyDate [VarChar](12) '../../../n:Supply/n:Dates/n:SupplyDate',
BestBefore [VarChar](12) '../../../n:Product/n:Dates/n:BestBeforeDate'
)
EXEC sp_xml_removedocument @hDoc