2013-07-24 4 views
32

में विशिष्ट ऑब्जेक्ट्स की एक सूची है, मुझे वास्तव में पाइथन में डॉकस्ट्रिंग का उपयोग करना पसंद है ताकि परियोजनाओं को एक निश्चित आकार से परे होने पर टाइप पैरामीटर निर्दिष्ट किया जा सके।यह निर्दिष्ट करने के लिए कि पैरामीटर पाइथन डॉकस्ट्रिंग्स

मुझे यह निर्दिष्ट करने के लिए मानक खोजने में परेशानी हो रही है कि पैरामीटर विशिष्ट ऑब्जेक्ट्स की एक सूची है, उदा। हास्केल प्रकारों में मैं [स्ट्रिंग] या [ए] का उपयोग करता हूं।

वर्तमान मानक (PyCharm संपादक के कारण पहचानी):

def stringify(listOfObjects): 
    """ 
    :type listOfObjects: list 
    """ 
    return ", ".join(map(str, listOfObjects)) 

क्या मैं पसंद करेंगे:

विकल्प 1

def stringify(listOfObjects): 
    """ 
    :type listOfObjects: list<Object> 
    """ 
    return ", ".join(map(str, listOfObjects)) 

विकल्प 2

def stringify(listOfObjects): 
    """ 
    :type listOfObjects: [Object] 
    """ 
    return ", ".join(map(str, listOfObjects)) 

मुझे लगता है कि यह एक अच्छा उदाहरण नहीं था - अधिक प्रासंगिक उपयोग केस एक होगा जहां सूची में वस्तुओं को एक विशिष्ट प्रकार का होना चाहिए।

बेहतर उदाहरण

class Food(Object): 
    def __init__(self, calories): 
     self.calories = calories 

class Apple(Food): 
    def __init__(self): 
     super(self, 200) 

class Person(Object): 
    energy = 0 
    def eat(foods): 
     """ 
     :type foods: [Food] # is NOT recognised by editor 
     """ 
     for food in foods: 
      energy += food.calories 

तो, तथ्य यह है कि मुझे भूख लगी हो रही है के अलावा अन्य, यह उदाहरण बताता है कि अगर वस्तु के गलत तरह की सूची के साथ कहा जाता है, कोड टूट जाएगा। इसलिए दस्तावेज के महत्व को न केवल एक सूची की आवश्यकता है, बल्कि इसे खाद्य पदार्थों की एक सूची की आवश्यकता है।

संबंधित सवाल How can I tell PyCharm what type a parameter is expected to be? कृपया ध्यान दें कि मैं ऊपर एक से एक अधिक विशिष्ट जवाब के लिए देख रहा हूँ।

+0

क्या आपने पीईपी को पाइथन वेबसाइट पर देखा था? – Jiminion

+0

मुझे इसके लिए कोई नहीं मिला, लेकिन मैंने इसे – Alex

+0

याद किया होगा http://stackoverflow.com/questions/24853923/python-3-annotations-type-hinting-a-list-of-a- के संभावित डुप्लिकेट निर्दिष्ट-प्रकार-पिचर्म (जहां मैंने पायथन 3.5 के 'टाइपिंग' मॉड्यूल के बारे में सीखा)। – Noumenon

उत्तर

39

टिप्पणी PyCharm's manual की धारा में डेवलपर की ओर से एक अच्छा संकेत है। अब यह मुझे आश्चर्यचकित करता है कि Python में parametrized कक्षाओं को दस्तावेज करने का सबसे अच्छा तरीका क्या है :)।

+0

यह उत्तर अब 2014 के अंत में [पीईपी 484] (https://www.python.org/dev/peps/pep-0484/) के निर्माण के साथ अप्रचलित है। लेकिन उस समय यह एक अच्छा जवाब था! :-) – Jason

+3

नोट: उत्तर केवल पायथन 3.5 और उसके लिए अप्रचलित है। –

3
अजगर

type([1,2,3]) == type(['a', 'b', 'c']) 

में

आप भी ints की सूची के लिए एक स्ट्रिंग जोड़ सकते हैं।

तो जो भी आप पाइचर्म प्राप्त करने की कोशिश कर रहे हैं, उसके लिए तर्क के रूप में इसे पार करने से पहले सूची में जो भी जोड़ रहे हैं, उसके लिए अपने पूरे कोड को जादुई रूप से जांचना होगा।

आप इस सवाल पर एक नज़र ले जा सकते हैं Python : define a list of a specific type of object

सरणी मॉड्यूल लेकिन केवल 'बुनियादी मूल्यों को' अनुमति देता है।

केवल समाधान जो मैं सोच सकता हूं वह अपनी खुद की कक्षा बनाना है जो पाइथन सूची "फूड्सलिस्ट" को बढ़ाता है जो तत्व जोड़ने से पहले प्रकार की जांच कर सकता है।

#: :type: dict of (str, C) 
#: :type: list of str 

यह बहुत अच्छी तरह से मेरे लिए काम करता है:

class Food(): 
    def __init__(self, calories): 
     self.calories = calories 

class FoodsList(list): 
    #you can optionally extend append method here to validate type 
    pass 

def eat(foods): 
    """ 
    :type foods: FoodsList 
    """ 
    energy = 0 
    for food in foods: 
     energy += food.calories 
    return energy 


list = FoodsList() 
list.append(Food(3)) 
list.append(Food(4)) 
print eat(list) 
+0

+1: यह समस्या की तुलना में मुझे एक बेहतर तरीके से हल करता है :) अच्छी अंतर्दृष्टि – Alex

+0

हालांकि मुझे संदेह है कि PyCharm सूची में जो जोड़ रहा है उसे देखने के लिए मेरे सभी कोड को 'जादुई रूप से' करने में काफी सक्षम है - यह वही है जो इसे करने के लिए डिज़ाइन किया गया है :) – Alex

1

जब गूगल शैली में docstrings लेखन आप कर सकते हैं:

class ToDocument(object): 
    """This is my Documentation. 

    Args: 
     typed_list (:obj:`list` of :obj:`str`): Description of typed list 

    """ 
    ... 

यह भी बहुत ठीक स्फिंक्स में जब नेपोलियन-विस्तार के साथ संयुक्त काम करता है। दस्तावेज़ीकरण पर अधिक उदाहरणों के लिए extension's doc का संदर्भ लें।

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