Если я пытаюсь передать класс «Человек» в метод при определении статических атрибутов этого класса, я получаю ошибку «Неопределенная переменная: Человек».
=> Как я могу получить доступ к текущему классу (-name), чтобы передать его показанному методу?
(В строке 7 нет доступного экземпляра класса Human. Поэтому этот вопрос отличается от Получение имени класса экземпляра? )
Я мог бы передать имя класса как жестко закодированную строку «Человек», но я хотел бы, если возможно, избегать жестко закодированных строк.
Скриншот:
Человек:
from h_database_orm.domain.entity import Entity
class Human(Entity):
first_name = Entity.string()
last_name = Entity.string()
spouse_id = Entity.foreign_key(Human)
spouse = Entity.one_to_one_attribute(Human)
Родительский класс Entity:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.ext.declarative import declared_attr
from sqlalchemy import Column, Integer, Float, String, ForeignKey
from sqlalchemy.orm import relation
class AbstractEntity():
@declared_attr
def __tablename__(self):
return AbstractEntity.table_name_for_class(self)
id = Column(Integer, primary_key=True)
@staticmethod
def table_name_for_class(clazz):
return clazz.__name__.lower()
@staticmethod
def integer():
return Column(Integer)
@staticmethod
def float():
return Column(Float)
@staticmethod
def string():
return Column(String)
@staticmethod
def foreign_key(referencedClass):
table_name = AbstractEntity.table_name_for_class(referencedClass)
foreign_key_path = table_name + '.id'
return Column(Integer, ForeignKey(foreign_key_path))
@staticmethod
def one_to_one_attribute(referenced_class):
class_name = referenced_class.__name__
return relation(class_name, uselist=False)
Entity = declarative_base(cls=AbstractEntity)