不能在类的开头检查变量的存在,告诉我如何实现它?
类代码开始:
class MButton():
def __init__(self, *arg):
self.parent = arg[0]
self.limage = arg[1]
self.lcommand = arg[2]
self.rcommand = arg[3]
尝试过这样的事情:,
(还有更多选择......)
try:
arg[4]
except IndexError:
arg[4] = None
问题2:
如果这些选项怎么办?允许吗?什么更好?
选项1:
Вызов:
self.test = MTest(width=10, height=10, **{'bdsize':1, 'bgcolor':2, 'parent':3})
class MTest():
def __init__(self, width, height, **args):
self.width=width
self.height=height
self.bdsize=args['bdsize']
self.bgcolor=args['bgcolor']
self.bdcolor=args['bdcolor']
self.parent=args['parent']
选项 2:
Вызов:
self.test = MTest(**{'width':10, 'height':10, 'bdsize':1, 'bgcolor':2, 'parent':3})
class MTest():
def __init__(self, **args):
self.width=args['width']
self.height=args['height']
self.bdsize=args.get('bdcolor')
self.bgcolor=args.get('bdcolor')
self.bdcolor=args.get('bdcolor')
self.parent=args.get('bdcolor')
选项 3:
Вызов:
self.test = MTest(**{'width':10, 'height':10, 'bdsize':1, 'bgcolor':2, 'parent':3})
class MTest():
def __init__(self, **args):
self.width=args.get('width')
self.height=args.get('height')
self.bdsize=args.get('bdcolor')
self.bgcolor=args.get('bdcolor')
self.bdcolor=args.get('bdcolor')
self.parent=args.get('bdcolor')
if not self.width == None or self.height == None:
raise Exception('ERROR: Проверьте правильность введенных данных обязательных параметров width и height !')
选项 4:
Вызов:
self.test = MTest(width=10, height=10, bdsize=1, parent=3)
class MTest():
def __init__(self, **args):
self.width=args['width']
self.height=args['height']
self.bdsize=args.get('bdsize')
self.parent=args.get('parent')
self.bgcolor=args.get('bgcolor')
self.bdcolor=args.get('bdcolor')
选项 5:
Вызов:
self.test = MTest(width=10, height=10, bdsize=1, parent=3)
class MTest():
def __init__(self, width, height, bdsize=None, bgcolor=None, bdcolor=None, parent=None):
self.width=width
self.height=height
self.bdsize=bdsize
self.bgcolor=bgcolor
self.bdcolor=bdcolor
self.parent=parent
如果您的选项有限,最好不要将它们隐藏在
*args
或后面**kwargs
。第一种情况的工作变体:
最后一个参数是可选的。
对于“选项 1”:
您还可以在方法头中指定参数类型,例如:
如果您尝试将不同类型的值传递给参数,PyCharm 将突出显示此代码,否则在通过 mypy 检查时会显示错误。当您在解释器中运行代码时,事实可能不是错误,因为。Python 是一种动态类型的语言(例如,如果您希望一个值是整数,并且您尝试将其作为数字处理,但在此之前,例如,传递了一个字符串,则会发生错误)。
您可以在此处阅读有关类型注释的信息:Python 类型注释简介
在任何情况下,方法参数的显式枚举都可以被认为是一种文档。IDE 和代码编辑器可以在编写代码时处理此问题并显示提示(参见下面的屏幕截图),这一事实使编程变得更加容易(甚至 IDLE 也以交互方式显示带有参数的提示)。指定一个参数
*args
,否则**kwargs
您将失去这些机会。VS代码:
PyCharm:
阅读 **kwargs 和 get dictionary 方法:
如果需要在没有参数的情况下显示错误,那么可以添加,例如: