HEX
Server: LiteSpeed
System: Linux houston.panomity.com 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 13 16:40:06 UTC 2026 x86_64
User: nudepix (1011)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //opt/agentcloud/airbyte/docs/connector-development/cdk-python/python-concepts.md
# Python Concepts

The Airbyte CDK makes use of various not-so-obvious Python concepts. You might want to revisit these concepts as you implement your connector:

## Abstract Classes [ABCs \(AbstractBaseClasses\)](https://docs.python.org/3/library/abc.html) and [abstractmethods](https://docs.python.org/3/library/abc.html#abc.abstractmethod)

You'll want a strong understanding of these as the central API concepts require extending and using them.

## [Keyword Arguments](https://realpython.com/python-kwargs-and-args/).

You'll often see this referred to as `**kwargs` in the code.

## [Properties](https://www.freecodecamp.org/news/python-property-decorator/)

Note that there are two ways of defining properties: statically and dynamically.

### Statically

```text
class Employee(ABC):
    @property
    @abstractmethod
    def job_title():
        """ returns this employee's job title"""

class Pilot(Employee):
    job_title = "pilot"
```

Notice how statically defining properties in this manner looks the same as defining variables. You can then reference this property as follows:

```text
pilot = Pilot()
print(pilot.job_title) # pilot
```

### Dynamically

You can also run arbitrary code to get the value of a property. For example:

```text
class Employee(ABC):
    @property
    @abstractmethod
    def job_title():
        """ returns this employee's job title"""

class Pilot(Employee):
    def job_title():
        # You can run any arbitrary code and return its result
        return "pilot"
```

## [Generators](https://wiki.python.org/moin/Generators)

Generators are basically iterators over arbitrary source data. They are handy because their syntax is extremely concise and feel just like any other list or collection when working with them in code.

If you see `yield` anywhere in the code -- that's a generator at work.