{"width":"100%","blog_url":"https://chyka.hatenablog.jp/","url":"https://chyka.hatenablog.jp/entry/2016/01/18/013550","provider_name":"Hatena Blog","blog_title":"Sing it out","type":"rich","author_name":"chyka","html":"<iframe src=\"https://hatenablog-parts.com/embed?url=https%3A%2F%2Fchyka.hatenablog.jp%2Fentry%2F2016%2F01%2F18%2F013550\" title=\"Read-only\u306aclassproperty\u30c7\u30b3\u30ec\u30fc\u30bf\u306e\u5b9f\u88c5 - Sing it out\" class=\"embed-card embed-blogcard\" scrolling=\"no\" frameborder=\"0\" style=\"display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;\"></iframe>","height":"190","published":"2016-01-18 01:35:50","author_url":"https://blog.hatena.ne.jp/chyka/","title":"Read-only\u306aclassproperty\u30c7\u30b3\u30ec\u30fc\u30bf\u306e\u5b9f\u88c5","categories":["\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0","Python"],"provider_url":"https://hatena.blog","description":"class classproperty(property): def __init__(self, fget): super(classproperty, self).__init__(fget) self.__doc__ = fget.__doc__ def __get__(desc, self, cls): return desc.fget(cls) class A(object): @classproperty def __tablename__(cls): return cls.__name__.lower() class B(A): pass print(A.__tablename_\u2026","image_url":null,"version":"1.0"}