LINUX.ORG.RU

Нейтральный тип в python

 


0

1

какой тип али какой класс чтобы

аля

int('234') приводит int
str(Value) дёргает __str__ али __repr_ если придётся

какой тип из известных али самописный

что бы возвращать тот же тип что и на входе?

Чтобы функция возвращала тот же тип, что и на входе, можно использовать несколько подходов в зависимости от того, какие типы вы хотите поддерживать. Вот пример реализации на Python, который возвращает тот же тип, что и на входе:

def return_same_type(value):
    # Получаем тип входного значения
    value_type = type(value)
    
    # Если это строка, пытаемся преобразовать её в число
    if value_type is str:
        try:
            return int(value)
        except ValueError:
            try:
                return float(value)
            except ValueError:
                return value  # Если не удалось преобразовать, возвращаем исходную строку
    
    # Если это число, преобразуем его в строку
    elif value_type is int or value_type is float:
        return str(value)
    
    # Для других типов возвращаем значение как есть
    return value

# Примеры использования:
print(return_same_type('234'))  # Вернёт 234 (int)
print(return_same_type(234))    # Вернёт '234' (str)
print(return_same_type(23.4))   # Вернёт '23.4' (str)
print(return_same_type('abc'))  # Вернёт 'abc' (str, так как не удалось преобразовать в число)

Объяснение:

  1. Определение типа входного значения: Используем type(value), чтобы определить тип входного значения.
  2. Обработка строк: Если входное значение — строка, пытаемся преобразовать её в целое число (int), а если не получается — в число с плавающей точкой (float). Если оба преобразования не удаются, возвращаем исходную строку.
  3. Обработка чисел: Если входное значение — целое число (int) или число с плавающей точкой (float), преобразуем его в строку (str).
  4. Другие типы: Для всех остальных типов возвращаем значение как есть.

Если нужно поддерживать пользовательские типы:

Если вы хотите поддерживать пользовательские типы, которые могут иметь свои методы __str__ или __repr__, можно использовать следующий подход:

def return_same_type(value):
    value_type = type(value)
    
    if value_type is str:
        try:
            return int(value)
        except ValueError:
            try:
                return float(value)
            except ValueError:
                return value
    elif value_type is int or value_type is float:
        return str(value)
    else:
        # Для пользовательских типов вызываем __str__ или __repr__
        return str(value)  # или repr(value), в зависимости от того, что вам нужно

# Пример с пользовательским типом:
class MyClass:
    def __str__(self):
        return "MyClass instance"

    def __repr__(self):
        return "MyClass()"

obj = MyClass()
print(return_same_type(obj))  # Вернёт "MyClass instance" (str)

В этом случае, если входное значение — это объект пользовательского класса, будет вызван его метод __str__ (или __repr__, если вы используете repr(value)), и результат будет возвращён как строка.р

anonymous
()
Ответ на: комментарий от upcFrost

обаргуменчивание из командной строки мультипроцесса при вызове из под if главное имя в дандерах:

было

g(*(int(a) for a in sys.argv[-2:]))

прикручивание строки(имя для перенапа stder не через щель а унутри ) стало

g(*(t(a) for t,a in zip((int,int,str),sys.argv[-3:])))

вот находу и экспромптнулось а как чище когда нейтрально

qulinxao3 ★☆
() автор топика
Ответ на: комментарий от anonymous

для repl-творчества (изначальный reload по горячему (теперь сломано ибо пакетов не было) input не raw был

eval(' '.join(sys.argv))

Очевидно не для джунглей

[upd:]

Гея мыслит эонами

qulinxao3 ★☆
() автор топика
Последнее исправление: qulinxao3 (всего исправлений: 1)