Bind API

Introduction

qi.bind allow specifying types for bound methods. By default methods parameters are of type AnyValue and always return an AnyValue.

With qi.bind you can specify which types the function really accept and return. With qi.nobind you can hide methods.

Reference

qi.bind(returnType = None, paramsType = Node, methodName = None)

This function decorator allows specifying types for bound methods. You can use methodName to rename the method.

qi.nobind()

This function decorator will prevent the function from being bound. (exported)

qi.singleThreaded()

This class decorator specifies that methods of this class will be run one at a time. That means that two methods wont never run at the same time. So you dont have to care about thread safeness. This is the default.

qi.multiThreaded()

This class decorator specifies that all methods in the class can be run concurrently. You will have to protect your methods for threadsafety.

Examples

How to have two functions with the same name?

This works for methods with different arguments types, or with different arguments count.

class MyFoo:

  @qi.bind(paramsType=(qi.Int32,) , methodName="bar")
  def bar1(self, arg):
    pass

  @qi.bind(paramsType=(qi.String,) , methodName="bar")
  def bar2(self, arg):
    pass

How to specify the return type of a method?

class MyFoo:

  @qi.bind(returnType=qi.String)
  def bar(self, arg):
    pass

How to specify the arguments types of a method?

class MyFoo:

  #this function take a string and an int. All others arguments types
  #will be rejected even before calling the method.
  @qi.bind(paramsType=(qi.String, qi.Int32))
  def bar(self, arg1, arg2):
    pass

How to hide that secret internal function?

class MyFoo:

  def bar(self, arg1, arg2):
    pass

  @qi.nobind
  def _privateOfHellBar(self, arg1, arg2):
    pass