Принудительно / гарантировать, что атрибуты класса python должны иметь определенный тип

Как мне ограничить переменную-член класса определенным типом в Python?


Более длинная версия:

У меня есть класс, который имеет несколько переменных-членов, которые устанавливаются извне к классу. Из-за того, как они используются, они должны быть определенного типа: int или list. Если бы это был C ++, я бы просто сделал их частными и выполнял проверку типов в функции 'set'. Учитывая, что это невозможно, есть ли способ ограничить тип переменных, чтобы во время выполнения возникала ошибка / исключение, если им присвоено значение неправильного типа? Или мне нужно проверять их тип в каждой функции, которая их использует?

Спасибо.

40
задан CapedHero 12 September 2017 в 18:12
поделиться

1 ответ

Я знаю, что это старо, но это - первый результат Google для этого вопроса, и все эти ответы кажутся чрезмерно сложными. По крайней мере, для python 3 это - простое решение:

class dog:
    species = 'Dog' 
    def __init__(self, name, age, weight):  
        self.name = str(name)
        self.age = int(age)
        self.weight = float(weight)

'''The following line tries to create a new object from the 'dog' class and 
passes a string instead of an integer for the age argument'''

newdog = dog('spike','three',60) 

, Когда выполнено исключение выдается:

ValueError: invalid literal for int() with base 10: 'three'

В Python, примитивные типы данных (интервал, плавание, ул., булевские переменные) являются самостоятельно классами. Таким образом при инстанцировании атрибутов класса класса прежде, чем передать параметры метода во время создания объекта значения аргументов будут преобразованы, если возможный (такой как от интервала до плавания) или исключение будет брошен, если тип данных не может быть преобразован (такой как от строки до целого числа).

0
ответ дан 27 November 2019 в 01:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: