所以,我正在用Python构建一个图灵机,我需要在解析器中实例化我的图灵机类,但我似乎无法获得正确的语法
以下是我定义TM的方式:
class TM(object):
def __init__(self, states, start, accept, reject, alpha, tAlpa, tape,
transition, head):
self.states = []
self.start = start
self.accept = accept
self.reject = reject
self.alpha = []
self.tAlpha =[]
self.tape = LinkedList(tape)
self.transitions = []
self.head = head
return;
所以我需要在解析器类中创建一个实例: 例如:
class Parser:
*some other logic*
tm = TM()
tm.states.append(something)
非常快速的示例向您展示了所需位置参数的效果:
在第一个类中,
**kwargs
允许我实例化并传递所需的任何关键字参数。这是一个星期的例子,但重点是你可以做一些初始化检查的存在,然后子检查的关键字名称在第二个类中,通过使用
... = None
,如果没有提供参数,我将其设置为默认值。同样,解释器也很高兴,因为所有参数都收到了一个值在上一节课中,我们看到了错误。注意,
req
不是用默认值定义的。因此,解释器要求它接收一个实例。当我不提供时,你会得到TypeError
告诉你的简而言之,如果不正确实例化一个类,您将无法访问它的任何属性或使用它的成员函数
编辑:想详细解释一下
此外,在OOP/D中,尝试找到避开长
__init__()
函数头的方法。请尝试以下操作:同样,使用
**kwargs
来确定何时我要在初始化时向对象提供值,但是我默认使用预定义的列表!分解一下:init_args
是一个现成的字典(就像kwargs
)。别让**
吓到你,那只是词典unpacking operator。列表也有一个,它的字面意思是*
for arg, default ... setattr(self, arg, kwargs.get(arg, default))
迭代预定义的参数容器,然后用kwargs.get()
中的值创建一个self.[insert_arg]
属性。它寻找arg
,如果找不到,就使用我们已经有的default
因此,稍后当您要在
Parser
类中进行单属性访问时:相关问题 更多 >
编程相关推荐