見下提取賦值的變量名
更新我甚至不知道如何讓我的問題的簡短標題。
在I類有StringField
一些類的類屬性:
class Authors(Table):
# id field is already present
first_name = StringField(maxLength=100)
last_name = StringField(maxLength=100)
StringField
構造可能會收到一個參數調用name
。如果沒有給出,我希望它等於班級屬性的名稱(在上例中爲first_name
,last_name
)。
是否可以提取創建的實例將分配給變量的名稱? 我想我必須使用inspect
模塊?
我看到Django的做到這一點:
每個字段類型,除了ForeignKey的,ManyToManyField和 OneToOneField,有一個可選的第一個位置參數 - 一個 冗長的名字。如果沒有給出詳細名稱,Django將使用字段的屬性名稱 自動創建它,並將 下劃線轉換爲空格。
在這個例子中,詳細名稱是 「人的名字」:
first_name = models.CharField("person's first name", max_length=30)
在這個例子中,詳細名稱是 「名」:
first_name = models.CharField(max_length=30)
但我沒有在Django 1.3.1源代碼中找到正在做我需要的部分。
UPDATE:
爲了簡化:
class Field():
def __init__(self, field_name=None):
if not field_name:
field_name = ??? # some magic here to determine the name
print(field_name)
class Table():
first_name = Field()
last_name = Field()
運行這個應該打印first_name
和last_name
SOLUTION:
class Field():
def __init__(self, name=None):
self._name = name
class Table():
first_name = Field()
last_name = Field()
for attrName, attr in Table.__dict__.items():
if isinstance(attr, Field):
if attr._name is None:
attr._name = attrName
print(Table.first_name._name)
print(Table.last_name._name)
StringField是否從django.db.models.Field擴展?你能發佈StringField的來源嗎?或者如果你沒有寫它,告訴我們你從哪裏獲得StringField,因爲它不是Django的一部分。 –
你不是讓這個更復雜嗎?你能否介紹一下你使用StringField的原因? – LaundroMat
我引用了Django文檔,因爲我看到Django使用這個 - 解釋我想要的內容,並且找不到相應的代碼。 StringField是我的自定義類。我只是想實現類似於Django的行爲。 – warvariuc