Django-tables2: ๋ฉ”ํƒ€ ์˜ต์…˜์€ ์ƒ์†๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2012๋…„ 07์›” 15์ผ  ยท  17์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: jieter/django-tables2

์•ˆ๋…•ํ•˜์„ธ์š”,

๋‹ค์Œ ํ…Œ์ด๋ธ”์ด ์žˆ์Šต๋‹ˆ๋‹ค.

    class BaseTable(tables.Table):
        select_column = tables.CheckBoxColumn(verbose_name='', empty_values=('NA',))

        class Meta:
            attrs = {'class' : 'cool_table'}

    class EditableTable(BaseTable):
        edit_column = EditIconColumn(verbose_name=_('Edit'))

        def set_editable(self, flag):
            if flag:
                self.base_columns['edit_column'].visible = True
            else:
                self.base_columns['edit_column'].visible = False   

    class RoomTable(EditableTable):
        number = tables.Column()
        speciality = tables.Column()
        photo = ImageViewColumn(accessor='room_type.photo')

RoomTable ๋ Œ๋”๋งํ•  ๋•Œ ์ƒ์„ฑ๋œ <table> ์— class ์†์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค. Meta ํด๋ž˜์Šค๋ฅผ BaseTable ์—์„œ RoomTable ๋กœ ์ด๋™(๋˜๋Š” ๋ณต์‚ฌ)ํ•  ๋•Œ๋งŒ ํ•ด๋‹น ์†์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋ฒ„๊ทธ์ž…๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ์ž˜๋ชป ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  17 ๋Œ“๊ธ€

๋ณด๊ณ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค. ์ด์ œ ๋‚ด ํ• ์ผ ๋ชฉ๋ก์˜ ๋งจ ์œ„์— ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”.

๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜ ๊ตฌํ˜„์„ ๊ฑฐ์˜ ๋งˆ์ณค๊ณ  Meta ์ƒ์†์„ ์œ„ํ•ด Django ์Šคํƒ€์ผ์„ ๋”ฐ๋ฅด๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ–ˆ์Šต๋‹ˆ๋‹ค.

class Meta(Parent.Meta):
    ...

๊ทธ๋ž˜์„œ ์ด์ œ ๋‚˜๋Š” ๊ทธ๊ฒƒ์—์„œ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒƒ์ด ์‹ค์ œ๋กœ ์ข‹์€ ์ƒ๊ฐ์ธ์ง€ ๊ถ๊ธˆํ•ด์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ•ญ์ƒ ์ฒซ ๋ฒˆ์งธ ์„œ๋ธŒ ํด๋ž˜์Šค์—์„œ, ์–ด์จŒ๋“  ์ผ์น˜ํ•˜์ง€ ์•Š๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค ๊ฐ€์ • django_tables2.Table ํ•  ๋‹น์‹ ์—๊ฒŒ _don't_ ํ•„์š” class Meta(django_tables2.Tables): ํ•˜์ง€๋งŒ, ๋” ์ด์ƒ ์„œ๋ธŒ ํด๋ž˜์Šค๋Š” _do_.

django_tables2.Table.Meta API๊ฐ€ ์—†๊ณ  ์ฒซ ๋ฒˆ์งธ ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ๋งŒ _starts_ํ•œ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์— ๋Œ€ํ•œ ๋‹น์‹ ์˜ ๋Š๋‚Œ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? Django์˜ ๋ชจ๋ธ์˜ ๋ฉ”ํƒ€ ์ƒ์†์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ์—ˆ๊ณ  ์—ฌ๊ธฐ์—์„œ ๋‹ค๋ฅผ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด Django์˜ API์— ์ˆœ์ง„ํ•ด์„œ ๊ทธ๋ƒฅ _๋งž๋Š”__ ๋Š๋‚Œ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๊นŒ?

๋ฐฉ๊ธˆ ๊ท€ํ•˜์˜ ์›๋ž˜ ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์ฝ์—ˆ์œผ๋ฉฐ ๊ท€ํ•˜์˜ ๋ฌธ์ œ๋Š” ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ๋ฉ”ํƒ€ ์˜ต์…˜์„ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€๋„ ์•Š๊ณ  ํ•˜์œ„ ํด๋ž˜์Šค๋กœ ๋ถ„๋ฅ˜ํ•˜๊ณ  ์—ด์„ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋ง์”€ํ•˜์‹  ๋‚ด์šฉ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜์ง€๋งŒ, ๋งž์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“ , ๋‚˜๋Š” Meta์— ๋Œ€ํ•ด ๊ฝค ์ƒˆ๋กœ์šด ์ ‘๊ทผ ๋ฐฉ์‹์ด ์ข‹์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ธŒ๋ž˜๋“ค๋ฆฌ,

์ด ํ”„๋กœ์ ํŠธ์˜ ์ž‘์—…์„ ์‚ฌ๋ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฌ๊ธฐ์„œ applegrew์™€ ๋™์ผํ•œ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ท€ํ•˜์˜ ๋งˆ์ง€๋ง‰ ์˜๊ฒฌ์€ ๋‚ด ๊ฒฝ์šฐ์™€ ์™„๋ฒฝํ•˜๊ฒŒ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

### Table Definitions ###
# parent class 
import django_tables2 as tables

# generic parent class to handle table styling
class MyAppTable(tables.Table):
    class Meta:
        attrs = {'class': 'render-table'}


# subclass in a separate app
from myapp_helpers.tables import MyAppTable
from django_tables2.utils import A
import django_tables2 as tables

class ItemTable(MyAppTable):

    address_1 = tables.Column()
    address_2 = tables.Column()
    address_3 = tables.Column()
    city = tables.Column()
    state = tables.Column()
    zipcode = tables.Column()

    # need this to fix a bug with the meta class not passing through to subclasses in django-tables2
    class Meta(MyAppTable.Meta):
        pass


## Views ##

# class based view in separate app
from django_tables2 import SingleTableView

# Parent class to make pagination the same across views
class MyAppListView(SingleTableView):

    # default of 10 rows in every table on every page
    table_pagination = {"per_page": 10 }
    template_name = 'generic_list.html'


# subclass of view in local app
class ItemListView(MyAppListView):
    model = Item
    table_class = ItemTable

ItemTable์— ํด๋ž˜์Šค Meta ์ •์˜๊ฐ€ ์—†์œผ๋ฉด ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ์„ค์ •ํ•œ ๋ฉ”ํƒ€ ์†์„ฑ์ด ์ „๋‹ฌ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋‚ด ์•ฑ์˜ ๋ชจ๋“  ํ…Œ์ด๋ธ”์— ๋™์ผํ•œ ์†์„ฑ์„ ๋ณด๋‚ด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค(๊ฒฐ๊ตญ MyAppTable์—์„œ ์ƒ์†๋จ).

๋ถ€๋ชจ Meta ํด๋ž˜์Šค(MyAppTable)์—์„œ ์ƒ์†ํ•œ ItemTable์— ๋นˆ Meta ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์€ ์ž‘๋™ํ•˜์ง€๋งŒ DRY ์›์น™์— ์œ„๋ฐฐ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ๋‘ ์ค„์— ๋ถˆ๊ณผํ•˜๊ณ  CSS ํด๋ž˜์Šค๋ฅผ ํ•œ ์ค„๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค๋Š” ์š”๊ตฌ ์‚ฌํ•ญ์„ ์—ฌ์ „ํžˆ ์ถฉ์กฑํ•ฉ๋‹ˆ๋‹ค. ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž‘ํ’ˆ์„ ๊ฐ์ƒ! ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์ด ์–ด๋””์—์„œ ์™”๋Š”์ง€ ์•Œ๊ณ  ์žˆ๊ณ  ๋‹น์‹ ์—๊ฒŒ ๋™์˜ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋ถ€๋ถ„์ ์œผ๋กœ ํŒจ์น˜๋ฅผ ์ž‘์„ฑํ–ˆ์ง€๋งŒ ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ Django๊ฐ€ ๋ชจ๋ธ์— ์ทจํ•˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ๋ชจ์ˆœ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜์˜ ํ˜„์žฌ ์ž…์žฅ์€ Django์™€ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด Django + Python ํ‘œ์ค€ ๋™์ž‘์„ ๊นจ๋Š” ๊ฒƒ์ด ์ •๋ง ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

Django/Python์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœํ•œ ์ง€ ์•ฝ ํ•œ ๋‹ฌ ๋งŒ์— ํ‘œ์ค€์„ ๊นจ๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋…ผ์Ÿ์„ ํ•  ์ž๊ฒฉ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๋ช‡ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

a) ์œ„์— ์ž์„ธํžˆ ์„ค๋ช…๋œ ๋Œ€๋กœ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๋ฌธ์„œํ™”ํ•ฉ๋‹ˆ๋‹ค(์•„์ง ์—†๋Š” ๊ฒฝ์šฐ ๋†“์ณค์„ ์ˆ˜ ์žˆ์Œ). ์ •๋ง ๋”์ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
b) ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ์ƒ์†ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” 'inherit_meta = False'์™€ ๊ฐ™์€ ์†์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Django ํ‘œ์ค€์— ๋”ฐ๋ผ ์ž‘์—…์„ ์œ ์ง€ํ•˜๋ ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์ด false์ด์ง€๋งŒ ๋‚˜์ฒ˜๋Ÿผ ๋ชจํ—˜์‹ฌ์ด ๋งŽ๊ณ  ๊ฒŒ์œผ๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ๋ฐ˜๋ณต๋˜๋Š” ๋ฉ”ํƒ€ ํด๋ž˜์Šค ์ •์˜์˜ ํ•„์š”์„ฑ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ณผ ์ˆ˜์žˆ๋Š” ์œ ์ผํ•œ ๋ฌธ์ œ๋Š” ์ž ์žฌ์ ์œผ๋กœ ๋ฒ„๊ทธ (์˜ˆ์ƒํ•˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์Œ) ๋“ฑ์„ ์œ ๋ฐœํ•  ์ˆ˜์žˆ๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์œ„ํ•ด ์ถ”๊ฐ€ ์ฝ”๋“œ ๋ฉ์–ด๋ฆฌ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
c) ์ด ๋™์ž‘์„ ์ƒˆ๋กœ์šด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธ€์„ ์“ฐ๊ณ  ์žˆ๋Š” ์ง€๊ธˆ๋„ ๋จธ๋ฆฌ์†์—๋Š” ์ƒ์†์ด ์ผ์–ด๋‚˜์ง€ ์•Š๊ณ  ํŒŒ์†์ด ๋ฐœ์ƒํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ฐ”ํƒ•์œผ๋กœ ํ…œํ”Œ๋ฆฟ ๋ณ€์ˆ˜๋ฅผ ์ฒดํฌํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ๋ˆˆ์— ๋•๋‹ˆ๋‹ค. ์ˆ˜๋™์œผ๋กœ ๋™์ž‘์„ ์žฌ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ธฐ์กด ์˜ˆ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์†”์งํžˆ ๋…ธ๋ ฅํ•  ๊ฐ€์น˜๊ฐ€ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋น„์ •ํ˜•์ ์ธ ๋™์ž‘์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋ฌธ์„œ์—์„œ ๋ฉ”ํƒ€ ์ƒ์† 'gotcha'์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฅผ ๋ณด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์— ๊ด€ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ฉ๋‹ˆ๋‹ค.

class Parent(tables.Table):
    class Meta:
        foo = 1

class Child(Parent):
    class Meta(Parent.Meta):
        bar = 2

Child.Meta ์—๋Š” ์ด์ œ foo = 1 _๋ฐ_ bar = 2

๋‚˜๋Š” ์ด๊ฒƒ์ด ๋ฌธ์„œ๋กœ ๊ณ ์น  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”. ๋‚˜๋Š” ์‹ค์ œ๋กœ applegrew์˜ ์˜ˆ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๋‚ด ์˜ˆ์—์„œ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์ข‹์€ ์ง€์ ์ž…๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ํ•œ ๊ฐ€์ง€ ์„ฑ๊ฐ€์‹ฌ์€ ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ์žฌ์ •์˜ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

class Parent(tables.Table):
    class Meta:
        attrs = {...}

class Child(Parent):
    class Meta(Parent.Meta):
         attrs = {'summary': 'A child table'}

์ œ๊ธฐ NameError ๊ฐ€์ง„ name 'attrs' is not defined . ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์ถ”์•…ํ•ฉ๋‹ˆ๋‹ค.

class Child(Parent):
    class Meta(Parent.Meta):
        pass
     Meta.attrs['summary'] = 'A child table'

์ด ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์ด ์•„์ง ์žˆ์Šต๋‹ˆ๊นŒ? ์œ„์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์ €์—๊ฒŒ ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. http://stackoverflow.com/questions/21787938/inherit-and-modify-a-meta-class

๋‘ ๊ฐœ์˜ ์ž„์˜์˜ class Meta ๋ฅผ ๋ณ‘ํ•ฉํ•˜๋Š” ๋ช…ํ™•ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. attrs ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , attrs ์—์„œ ํ‚ค๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , attrs ๋ฅผ ์ƒˆ ์‚ฌ์ „์œผ๋กœ ๋ฐ”๊พธ๋Š” ๋“ฑ์˜ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด ๋ณด์‹ญ์‹œ์˜ค. ์–ด์ฉŒ๋ฉด ๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ์žˆ์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์ œ์ •์‹ ์œผ๋กœ ์ด๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ์ธ์ง€ ๋‚˜์—๊ฒŒ ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋™์ž‘์€ models.Model ํด๋ž˜์Šค์˜ ํ•˜์œ„ ํด๋ž˜์Šค์ธ ๊ฒฝ์šฐ์™€ ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์ด ๋งํ•˜๋Š” ๊ฒƒ์„ ๋”ฐ๋ฅด๊ณ  ์žˆ๋Š”์ง€ ํ™•์‹ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ๋ฉ”ํƒ€๋ฅผ ์ƒ์†ํ•˜๊ณ  ๋ช‡ ๊ฐœ์˜ ์—ด์„ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ SO ์งˆ๋ฌธ์—์„œ ์ฝ”๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ–ˆ๋Š”๋ฐ ์กฐ๊ธˆ ๋” ์˜๋ฏธ๊ฐ€ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@bradleyayers -- ๊ท€ํ•˜์˜ ์š”์ฒญ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์ด StackOverflow ๊ฒŒ์‹œ๋ฌผ ์„ ๋”ฐ๋ผ Meta๋ฅผ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@pydolan ์˜ˆ, ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ๋„ http://stackoverflow.com/questions/21787938/inherit-and-modify-a-meta-class ๋ฅผ ํ™•์ธ

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰