我正在尝试在python 3.7中开发类似开关箱功能的功能,例如从其他语言中了解到的功能。
为此,我在这里使用了本教程:https://jaxenter.com/implement-switch-case-statement-python-138315.html
并以以下代码开头:
class ClassCheckShipping:
def __init__(self):
pass
def __checkAktivweltShipping(self, country):
return "checkShipping für Aktivwelt"
def __checkHoerhelferShipping(self, country):
return "checkShipping für Hörhelfer"
def checkShipping(self, merchant, country):
self.country = country
switcher = {
"Aktivwelt": __checkAktivweltShipping,
"Hörhelfer": __checkHoerhelferShipping
}
func = switcher.get(merchant, lambda: "unbekannter Merchant")
print(func())
不幸的是,我收到以下错误,但找不到我的错误。
文件“ M:\ Python-Projekte \ Wipando-Feeds \ CheckShipping.py”,在checkShipping中的第18行 “ Aktivwelt”:__checkAktivweltShipping, NameError:名称“ _ClassCheckShipping__checkAktivweltShipping”未定义
您能给我一个提示来修复此代码吗?
答案 0 :(得分:4)
您必须将self
添加到switcher
中的方法中:
switcher = {
"Aktivwelt": self.__checkAktivweltShipping,
"Hörhelfer": self.__checkHoerhelferShipping
}
答案 1 :(得分:3)
您应该输入:pytest
和self.__checkAktivweltShipping
答案 2 :(得分:1)
另一种解决方案是将switcher
定义为类成员(因为它是常量),那么您可以省略使用self.
def __checkAktivweltShipping(self, country):
return "checkShipping für Aktivwelt"
def __checkHoerhelferShipping(self, country):
return "checkShipping für Hörhelfer"
__switcher = {
"Aktivwelt": __checkAktivweltShipping,
"Hörhelfer": __checkHoerhelferShipping
}
现在也必须使用self
来引用它,但是代码更简单(也更快,因为python不必在每次调用时都重新构建字典,创建类时只执行一次)>
def checkShipping(self, merchant, country):
self.country = country
func = self.__switcher.get(merchant, lambda: "unbekannter Merchant")
print(func())