---
myst:
html_meta:
description: Custom classes in PyTorch C++ — registering C++ classes for use in TorchScript and Python.
keywords: PyTorch, C++, custom class, TorchScript, TORCH_CLASS, registration
---
# Custom Classes
PyTorch allows registering custom C++ classes that can be used from Python
and TorchScript.
Header: `torch/custom_class.h`
## class\_ Template
```{doxygenclass} torch::class_
:members:
:undoc-members:
```
**Example:**
```cpp
#include
struct MyClass : torch::CustomClassHolder {
int value;
MyClass(int v) : value(v) {}
int getValue() const { return value; }
void setValue(int v) { value = v; }
};
TORCH_LIBRARY(my_classes, m) {
m.class_("MyClass")
.def(torch::init())
.def("getValue", &MyClass::getValue)
.def("setValue", &MyClass::setValue)
.def_readwrite("value", &MyClass::value);
}
```
## Registering Methods
**Constructor:**
```cpp
m.class_("MyClass")
.def(torch::init()) // Constructor taking int
```
**Methods:**
```cpp
m.class_("MyClass")
.def("getValue", &MyClass::getValue)
.def("setValue", &MyClass::setValue)
```
**Properties:**
```cpp
m.class_("MyClass")
.def_readwrite("value", &MyClass::value) // Read-write
.def_readonly("const_value", &MyClass::const_value) // Read-only
```
## Using Custom Classes
**From C++:**
```cpp
auto my_obj = c10::make_intrusive(42);
int val = my_obj->getValue();
```
**From Python:**
```python
import torch
torch.classes.load_library("path/to/library.so")
obj = torch.classes.my_classes.MyClass(42)
print(obj.getValue())
```
**In TorchScript:**
```python
@torch.jit.script
def use_my_class(x: torch.classes.my_classes.MyClass) -> int:
return x.getValue()
```