public function attributes()
    {
        try {
            $class = new ReflectionClass($this);
            $names = [];
            foreach ($class->getProperties(\ReflectionProperty::IS_PUBLIC) as $property) {
                if (!$property->isStatic()) {
                    $names[] = $property->getName();
                }
            }
        } catch (\ReflectionException $exception) {
            Reaction::error($exception);
            $names = [];
        }

        return $names;
    }