code: def add_attribute(self, ont_id: str, ctrl_acct: Account, attributes: Attribute, payer: Account, gas_limit: int,
                        gas_price: int) -> str:
          
          if not isinstance(ctrl_acct, Account) or not isinstance(payer, Account):
              raise SDKException(ErrorCode.require_acct_params)
          pub_key = ctrl_acct.get_public_key_bytes()
          b58_payer_address = payer.get_address_base58()
          tx = self.new_add_attribute_transaction(ont_id, pub_key, attributes, b58_payer_address, gas_limit, gas_price)
          tx.sign_transaction(ctrl_acct)
          tx.add_sign_transaction(payer)
          tx_hash = self.__sdk.get_network().send_raw_transaction(tx)
          return tx_hash
docs: This interface is used to send a Transaction object which is used to add attribute.
  
          :param ont_id: OntId.
          :param ctrl_acct: an Account object which indicate who will sign for the transaction.
          :param attributes: a list of attributes we want to add.
          :param payer: an Account object which indicate who will pay for the transaction.
          :param gas_limit: an int value that indicate the gas limit.
          :param gas_price: an int value that indicate the gas price.
          :return: a hexadecimal transaction hash value.