#python #function #class #types #getattr
Вопрос:
Я пытаюсь создать программу, которая будет заменять значения размеров в тысячах продуктов и десятках функций для каждого продукта. Для этого я использую re для поиска и замены текстовых блоков в XML-программе.
В приведенном ниже коде я создал класс и некоторые функции, которые будут возвращать то, что будет заменять исходный текст.
Я пытаюсь использовать свою функцию get() для динамического вызова других функций в моем классе, но она возвращает только <class ‘NoneType’>, и мне нужно вернуть <class ‘NoneType’><class ‘str’>.
Если я просто вызову MyClass.function (), он вернет <class ‘str’>. Только когда я пытаюсь вызвать свою функцию через MyClass.get (), она возвращает <class ‘NoneType’>
Любая помощь будет чрезвычайно признательна!
class Variable:
def __init__(self, variable, metric_flag, nominal, upper_tol, lower_tol):
self.variable = variable
self.metric_flag = metric_flag
self.nominal = nominal
self.upper_tol = upper_tol
self.lower_tol = lower_tol
def get(self):
def func_not_found():
print(f'No Variable {self.variable} Found!')
func_name = self.variable
func = getattr(self, func_name, func_not_found)
func()
def wobble_comp(self):
if self.metric_flag == 1:
return f""" <WobbleZ1>67.056</WobbleZ1>
<WobbleX1>{mm(self.nominal) / 2}</WobbleX1>
<WobbleZ2>12.7</WobbleZ2>
<WobbleX2>{mm(self.nominal) / 2}</WobbleX2>"""
else:
return f""" <WobbleZ1>67.056</WobbleZ1>
<WobbleX1>{self.nominal / 2}</WobbleX1>
<WobbleZ2>12.7</WobbleZ2>
<WobbleX2>{self.nominal / 2}</WobbleX2>"""
def axial_primary_relief_angle(self):
return f""" <ReliefAngle90No1Nominal>{self.nominal}</ReliefAngle90No1Nominal>
<ReliefAngle90No1UpperTol>{self.upper_tol}</ReliefAngle90No1UpperTol>
<ReliefAngle90No1LowerTol>{self.lower_tol}</ReliefAngle90No1LowerTol>"""
def axial_primary_relief_land_width(self):
if self.metric_flag == 1:
return f""" <Phase90Nominal>{mm(self.nominal)}</Phase90Nominal>
<Phase90UpperTol>{mm(self.upper_tol)}</Phase90UpperTol>
<Phase90LowerTol>{mm(self.lower_tol)}</Phase90LowerTol>"""
else:
return f""" <Phase90Nominal>{self.nominal}</Phase90Nominal>
<Phase90UpperTol>{self.upper_tol}</Phase90UpperTol>
<Phase90LowerTol>{self.lower_tol}</Phase90LowerTol>"""
def axial_secondary_relief_angle(self):
return f""" <ReliefAngle90No2Nominal>{self.nominal}</ReliefAngle90No2Nominal>
<ReliefAngle90No2UpperTol>{self.upper_tol}</ReliefAngle90No2UpperTol>
<ReliefAngle90No2LowerTol>{self.lower_tol}</ReliefAngle90No2LowerTol>"""
def core_diameter(self):
if self.metric_flag == 1:
return f""" <CoreScanNominal>{mm(self.nominal)}</CoreScanNominal>
<CoreScanUpperTol>{mm(self.upper_tol)}</CoreScanUpperTol>
<CoreScanLowerTol>{mm(self.lower_tol)}</CoreScanLowerTol>"""
else:
return f""" <CoreScanNominal>{self.nominal}</CoreScanNominal>
<CoreScanUpperTol>{self.upper_tol}</CoreScanUpperTol>
<CoreScanLowerTol>{self.lower_tol}</CoreScanLowerTol>"""
variable1 = 'core_diameter'
metric_flag1 = 1
nominal1 = .125
high_tol1 = .001
low_tol1 = -.001
v = Variable(variable1, metric_flag1, nominal1, high_tol1, low_tol1)
print(type(v.core_diameter()))
print(type(v.get()))
Комментарии:
1.Привет, Кевин. В
get
конце концов, вы просто звонитеfunc
, но ничего не делаете с его возвращаемым значением. Вот почемуget
неявно возвращаетсяNone
. Просто скажиreturn func()
вместо этого.2. @Лагербер Спасибо тебе! это все исправило!