我的目标是在Python中的多个类中使用相同的函数。
我看过关于混合和继承等的讨论,但它们似乎都带有关于做正确的事情的警告和警告。
所以我想知道我是否可以调用另一个存在于类之外的普通旧函数。 它似乎有效,但也许我无法理解重要的事情?
所以我的问题是 - 这是在 Python 类之间共享函数的有效方法吗?
def clean_reference_url(self):
if not self.cleaned_data['reference_url']:
return ''
try:
if 'illegaltext' in self.cleaned_data['reference_url']:
raise Exception
except:
raise forms.ValidationError('You cannot put illegaltext in this field.')
return self.cleaned_data['reference_url']
class ContactForm(forms.ModelForm):
def clean_reference_url(self):
return clean_reference_url(self)
class TripForm(forms.ModelForm):
def clean_reference_url(self):
return clean_reference_url(self)
这是有效的,但没有必要有额外的包装层。混合方法是最简单的,但是是的,它有一些警告(主要与元类有关),所以如果你想避免这种情况,你仍然可以在每个类的定义期间设置一个方法。保持函数定义相同,并将类更改为:
class ContactForm(forms.ModelForm):
clean_reference_url = clean_reference_url
class TripForm(forms.ModelForm):
clean_reference_url = clean_reference_url
同样,混合甚至更干净,例如:
class CleanableUrl: # Change name as appropriate
def clean_reference_url(self):
# ...
class ContactForm(CleanableUrl, forms.ModelForm):
# No need to talk about clean_reference_url at all
class TripForm(CleanableUrl, forms.ModelForm):
# No need to talk about clean_reference_url at all
它通常是最 Python 的方法,假设它适用于你的场景(基类型上没有冲突的元类)。