我有一個接收實例變量(表單域)的表單對象。現在我想用方法鏈來驗證那些變量。任意方法的例子:
class Field(object):
def __init__(self, form, name):
self.form = form
self.name = name
def unspace(self):
setattr(self.form, self.name, getattr(self.form, self.name).replace(' ',''))
return self
def len_valid(self, length):
if len(getattr(self.form, self.name)) < length :
setattr(self.form, self.name + '_invalid', True)
self.form.valid = False
return self
class Forms(object):
def __init__(self):
self.valid = True
def validate(self, name):
return Field(self,name)
f = Forms() # create the form with some data
f.a = 'J o Hn '
f.b = ' Too L o n g'
f.validate('a').unspace().len_valid(2)
f.validate('b').unspace().len_valid(5)
RESULT :
f.a : 'JoHn'
f.a_invalid : True
f.b : 'TooLong'
f.valid : False
這是在Form實例變量上創建方法鏈接的Pythonic方法。
不是一個直接的答案,但是:這些東西必須是屬性(實例變量)而不是隻是'dict'的成員,所以你可以放下所有'setattr' /'getattr'東西並寫入簡單,直接的代碼? – abarnert
你讓這種方式太複雜了。做@abarnert說什麼,只是把所有內容都寫成字典。 – katrielalex