I was doing something similar. Because torch.Tensor is a wrapper over a C type, you have to override the __new__ method instead. Using your example,
class MyObject(torch.Tensor):
    @staticmethod
    def __new__(cls, x, extra_data, *args, **kwargs):
        return super().__new__(cls, x, *args, **kwargs)
    
    def __init__(self, x, extra_data):
        #super().__init__() # optional
        self.extra_data = extra_data
        
obj_ = MyObject([1, 2, 3], 'extra_data_123')
obj_.extra_data

returns 'extra_data_123'.
The super call to init is marked optional because I think torch.Tensor uses the default object.__init__ call, which is a no-op. However, if you wanted to subclass a child of torch.Tensor that you create in this way, uncomment it.
By the way, you may want to look into the torch.tensor function and put that into the __new__ method as well. As is, you cannot pass things like dtype to torch.Tensor or this subclass.