Как заставить атрибут быть int в python? - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть следующий класс:

class C3DPoint(object):
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z

    # Other methods

Я хочу быть уверен, что если кто-то установит v3dpoint.x = <sth>, он выдаст ошибку, если vale не является строкой.

Как это можно сделать?

Ответы [ 4 ]

0 голосов
/ 08 ноября 2018

Хороший дизайн Python избегает явной проверки типов: «если он крякает как утка, это утка ...». Поэтому сначала вы должны попытаться выполнить проверку данных вне вашего класса, или не делать этого вовсе.

Сказав это, один из способов проверки - переопределить __setattr__ , как описано здесь :

class Point():

    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z

    def __setattr__(self, name, value):
        assert isinstance(value, str), "Value must be of type str"
        super().__setattr__(name, value)

p = Point('a', 'b', 'c')
p.x = 3

# AssertionError: Value must be of type str
0 голосов
/ 08 ноября 2018

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

def __init__(x: int, y: int , z: int):

Это, однако, не приведет к возникновению ошибок типа TypeErrors, поскольку мы все взрослые по соглашению, для этого вы можете выполнить проверку типа.

if not (isinstance x, int):
    # throw Error
0 голосов
/ 08 ноября 2018

Используйте попытку / кроме:

try:
    int(a)
except Exception as e:
    print "That's not an int"
0 голосов
/ 08 ноября 2018

Вы можете сделать это так:

variable_name: type = value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...