UClass Decorators (Python)
@unreal.uclass(), @unreal.ufunction() and @unreal.uproperty()
Description
By default, ordinary Python classes, functions and properties do not get exposed to Unreal's UObject reflection system, which means standard Python classes cannot fully override Unreal base classes, standard Python functions cannot subscribe to Unreal events or delegates, and standard Python properties cannot be accessed from C++ through UObject reflection.
The decorators @unreal.uclass() @unreal.ufunction() and @unreal.uproperty() are required to correctly expose classes, functions and properties to Unreal's reflection system, and provide Unreal-specific metadata, much like the UCLASS(), UFUNCTION() and UPROPERTY() defines in C++.
Parameters
The @unreal decorators in Python require a somewhat different set of parameters compared to their C++ equivalents. These are some of the parameters to the @unreal.ufunction() decorator in Python:
-
ret=<type>
- Specifies the return type of the function. Python functions with the ufunction() decorator usually have only one return value. Required unless override=True. -
params=[<type>,...]
- Specifies the types of the arguments to the function. Required unless override=True. -
override=True
- Specifies that this function overrides a virtual UFunction in a parent UClass, and should inherit its type specifiers. With this parameter, ret and params are no longer needed. -
meta=dict()
- Dictionary containing standard Unreal parameters as seen in UFUNCTION() in C++.
Atomic types must be specified as Python Data Types, not C++ data types.
Sample
@unreal.uclass()
class MyExampleObject(unreal.Object):
@unreal.ufunction(ret=bool,params=[str],meta=dict(Category="A"))
def is_valid_name(self,in_name):
return bool(in_name)
Additional Sources
-
Building UE4 Blueprint Function Libraries in Python (https://medium.com/@joe.j.graf/building-ue4-blueprint-function-libraries-in-python-746ea9dd08b2)
-
Decorators in Python (https://www.learnpython.org/en/Decorators)