2013-04-16 27 views
5

मैं एक Django आवेदन के लिए परीक्षण लिख रहा हूँ आर्ग 'स्वयं' भेजने और अपने परीक्षण वर्ग पर एक विशेषता का उपयोग कर स्टोर करने के लिए जो देखने में यह परीक्षण होना चाहिए है इस तरह, बिना:कॉल बाहरी समारोह

# IN TESTS.PY 
class OrderTests(TestCase, ShopTest): 
    _VIEW = views.order 

    def test_gateway_answer(self): 
     url = 'whatever url' 
     request = self.request_factory(url, 'GET') 
     self._VIEW(request, **{'sku': order.sku}) 


# IN VIEWS.PY 
def order(request, sku) 
    ... 

मेरे अनुमान है कि मेरी समस्या यह है क्योंकि चूंकि मैं OrderTests वर्ग की विशेषता को कॉल कर रहा हूं, इसलिए पाइथन मानता है कि मैं self भेजना चाहता हूं और फिर order गलत तर्क प्राप्त करना चाहता हूं। हल करने में आसान ... बस इसे क्लास एट्रिब्यूट के रूप में उपयोग न करें, लेकिन मैं सोच रहा था कि इस मामले में स्वयं को भेजने के लिए पाइथन को बताने का कोई तरीका नहीं है।

धन्यवाद।

+0

ध्यान दें कि क्या आपके पास यहां एक उदाहरण विधि है, क्लास विधि नहीं। यह एक महत्वपूर्ण भेद है, जिसकी समझ से आप अपनी समस्या को ठीक करने में मदद करेंगे। –

उत्तर

9

ऐसा इसलिए होता है क्योंकि पायथन कार्यों में descriptors हैं, इसलिए जब उन्हें कक्षा के उदाहरणों पर पहुंचाया जाता है तो वे उदाहरण के लिए अपना पहला (मान लिया self) पैरामीटर बांधते हैं।

आप वर्ग पर _VIEW यहां पहुंच सकता है उदाहरण पर नहीं:

class OrderTests(TestCase, ShopTest): 
    _VIEW = views.order 

    def test_gateway_answer(self): 
     url = 'whatever url' 
     request = self.request_factory(url, 'GET') 
     OrderTests._VIEW(request, **{'sku': order.sku}) 

वैकल्पिक रूप से, आप इसे उदाहरण के लिए बाध्य किया जा रहा रोकने के लिए staticmethod में लपेट कर सकते हैं:

class OrderTests(TestCase, ShopTest): 
    _VIEW = staticmethod(views.order) 

    def test_gateway_answer(self): 
     url = 'whatever url' 
     request = self.request_factory(url, 'GET') 
     self._VIEW(request, **{'sku': order.sku}) 
+0

कूल! मैं 'staticmethod' के बारे में जानता था लेकिन मुझे नहीं पता था कि इसे एक समारोह के रूप में इस्तेमाल किया जा सकता है (जो मेरे बारे में सोचता था, अब मैं इसके बारे में सोचता हूं, लेकिन हे ...) बहुत बहुत धन्यवाद! – Gabe

संबंधित मुद्दे