Python: Как определить тип свойства в классе? - PullRequest
0 голосов
/ 27 августа 2018

У меня определены следующие классы, которые наследуются от некоторых других классов. Goblin - это пакет зависимостей Python, который я расширяю.

class AnnotatedVertexProperty(goblin.VertexProperty):
    notes = goblin.Property(goblin.String)
    datetime = goblin.Property(DateTime)

class KeyProperty(goblin.Property):
    def __init__(self, data_type, *, db_name=None, default=None, db_name_factory=None):
        super().__init__(data_type, default=None, db_name=None, db_name_factory=None)

class TypedVertex(goblin.Vertex):
    def __init__(self):
        self.vertex_type = self.__class__.__name__.lower()
        super().__init__()

class TypedEdge(goblin.Edge):
    def __init__(self):
        self.edge_type = self.__class__.__name__.lower()
        super().__init__()

class Airport(TypedVertex):
    #label
    type = goblin.Property(goblin.String)
    airport_code = KeyProperty(goblin.String)
    airport_city = KeyProperty(goblin.String)
    airport_name = goblin.Property(goblin.String)
    airport_region = goblin.Property(goblin.String)
    airport_runways = goblin.Property(goblin.Integer)
    airport_longest_runway = goblin.Property(goblin.Integer)
    airport_elev = goblin.Property(goblin.Integer)
    airport_country = goblin.Property(goblin.String)
    airport_lat = goblin.Property(goblin.Float)
    airport_long = goblin.Property(goblin.Float)

Во время выполнения мне нужно выполнить итерацию каждого из свойств и определить тип его класса (keyProperty или goblin.Property). Мне также нужно определить, является ли значение строкой, целым числом и т. Д. ...

Во время создания экземпляра я создаю объект аэропорта и задаю следующие значения:

lhr = Airport()
lhr.airport_code = 'LHR'
print (lhr.airport_code.__class__.mro())
lhr.airport_city = 'London'
lhr.airport_name = 'London Heathrow International Airport'
lhr.airport_region = 'UK-EN'
lhr.airport_runways = 3
lhr.airport_longest_runway = 12395
lhr.airport_elev = 1026
lhr.airport_country = 'UK'
lhr.airport_lat = 33.6366996765137
lhr.airport_long = -84.4281005859375 

Однако, когда я проверяю объект во время отладки, все, что я получаю, это имя свойства, определяемое как строка и значения, определенные как строка, целое число и т. Д. ... Как я могу проверить тип объекта для каждого свойства? Любая помощь или предложения о том, как справиться с этим?

1 Ответ

0 голосов
/ 29 августа 2018

Я понял, что искал. Мне пришлось вызвать element. class . dict .items (): и я могу получить словарь со всеми свойствами, сопоставлениями и т. Д. ...

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