@MrChen

Почему дескрипторы класса не добавляются в __dict__ в Python?

Здравствуйте! Есть данный код:
from datetime import date
from pgdb import PGSql

class IDField:
	def __get__(self, obj, obj_type):
		pass

class DictField(object):
	def __init__(self, original_dict = None):
		self.container = original_dict or dict()

	def __getitem__(self, index):
		return self.container[index]

	def __setitem__(self, index, value):
		self.container[index] = value

	def __get__(self, obj, obj_type):
		return self.container

class DateField(object):
	def __init__(self):
		self.value = date.today()

	def __get__(self, obj, obj_type):
		return self.value.strftime("%d.%m.%y")

	def __set__(self, obj, value):
		self.value = value

class IntegerField(object):
	def __init__(self, value = None):
		self.value = value

	def __get__(self, obj, obj_type):
		return self.value

	def __set__(self, obj, value):
		self.value = int(value)

class StringField(object):
	def __init__(self, value = None):
		self.value = value or ""

	def __get__(self, obj, obj_type):
		return self.value

	def __set__(self, obj, value):
		self.value = str(value)

class BaseModel:
	def __init__(self, tableName):
		self._db = PGSql()
		self._table = tableName

class cafe(BaseModel):
	idx = IDField()

	title = StringField()

	description = StringField()

	images = DictField()

	owner_id = IntegerField()

	scheme_id = IntegerField()

	created_at = DateField()

	edited_at = DateField()

	def __init__(self):
		super().__init__(type(self).__name__)

	def __getattr__(self, name):
		return f"Атрибут {name} не был найден"


cafe = cafe()

cafe.title = "CoffeeShop"

cafe.scheme_id = "123"

print(cafe.__dict__)


Но почему-то при попытке вывести cafe.__dict__ он выводит только:

{'_db': <pgdb.PGSql object at 0x10abe7f60>, '_table': 'cafe'}


Но не выводит атрибутов класса Cafe. Что с этим делать?

И еще, пожалуйста, ответьте на вопрос: как убрать наследование атрибутов класса BaseModel в класс Cafe?
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы