আমি কীভাবে পাইচার্মকে বলতে পারি যে কোনও প্যারামিটারটি কী ধরনের আশা করা যায়?


173

কনস্ট্রাক্টর, এবং অ্যাসাইনমেন্ট এবং পদ্ধতি কলগুলির ক্ষেত্রে, পাইকার্ম আইডিই আমার উত্স কোডটি বিশ্লেষণ করতে এবং প্রতিটি ভেরিয়েবলটি কী প্রকারের হবে তা নির্ধারণে বেশ ভাল। আমি যখন এটি সঠিক তা পছন্দ করি, কারণ এটি আমাকে ভাল কোড-সমাপ্তি এবং পরামিতি সম্পর্কিত তথ্য দেয় এবং যদি অস্তিত্ব নেই এমন একটি বৈশিষ্ট্য অ্যাক্সেস করার চেষ্টা করি তবে এটি আমাকে সতর্কতা দেয়।

কিন্তু যখন এটি পরামিতি আসে, এটি কিছুই জানে না। কোড-সমাপ্তির ড্রপডাউনগুলি কোনও কিছুই প্রদর্শন করতে পারে না, কারণ তারা জানে না যে পরামিতিটি কী প্রকার হবে। কোড বিশ্লেষণ সতর্কতা সন্ধান করতে পারে না।

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

peasant = Person("Dennis", 37)
# PyCharm knows that the "peasant" variable is of type Person
peasant.dig_filth()   # shows warning -- Person doesn't have a dig_filth method

class King:
    def repress(self, peasant):
        # PyCharm has no idea what type the "peasant" parameter should be
        peasant.knock_over()   # no warning even though knock_over doesn't exist

King().repress(peasant)
# Even if I call the method once with a Person instance, PyCharm doesn't
# consider that to mean that the "peasant" parameter should always be a Person

এটি একটি নির্দিষ্ট পরিমাণে বোধ তৈরি করে। অন্যান্য কল সাইটগুলি এই পরামিতিটির জন্য কিছু পাস করতে পারে। তবে আমার পদ্ধতিটি যদি কোনও প্যারামিটারটি টাইপ হওয়ার প্রত্যাশা করে, তবে বলুন, pygame.Surfaceআমি পাইকার্মে এটি কোনওভাবে নির্দেশ করতে সক্ষম হতে চাই, সুতরাং এটি Surfaceকোড-সমাপ্তি ড্রপডাউনটিতে আমাকে সমস্ত বৈশিষ্ট্যগুলি দেখাতে পারে এবং সতর্কতা হাইলাইট করে যদি আমি ভুল পদ্ধতি কল, ইত্যাদি।

আমি পাইচার্মকে একটি ইঙ্গিত দিতে এবং "পিএসএস্ট, এই প্যারামিটারটি এক্স টাইপের বলে মনে করা যেতে পারে"? (বা সম্ভবত, গতিশীল ভাষার চেতনায়, "এই প্যারামিটারটি এক্স এর মতো ভঙ্গ হবে"? আমি সে সাথে ভাল থাকব))


সম্পাদনা: ক্রেজি কোডারের উত্তর নীচে, কৌশলটি করে। আমার মতো নতুনদের যারা দ্রুত সংক্ষিপ্তসার চান, তাদের জন্য এটি এখানে:

class King:
    def repress(self, peasant):
        """
        Exploit the workers by hanging on to outdated imperialist dogma which
        perpetuates the economic and social differences in our society.

        @type peasant: Person
        @param peasant: Person to repress.
        """
        peasant.knock_over()   # Shows a warning. And there was much rejoicing.

প্রাসঙ্গিক অংশটি @type peasant: Personডকস্ট্রিংয়ের লাইন।

আপনি যদি ফাইল> সেটিংস> পাইথন ইন্টিগ্রেটেড সরঞ্জামগুলিতে যান এবং "ডকস্ট্রিং ফর্ম্যাট "টিকে" এপিটেক্সট "তে সেট করেন তবে পাইচার্মের ভিউ> কুইক ডকুমেন্টেশন লুকআপ কেবলমাত্র সমস্ত @-লাইনগুলি যেমন প্রিন্ট করা হবে তার পরিবর্তে প্যারামিটারের তথ্যগুলি প্রিন্ট করবে।


7
এটি লক্ষণীয় যে পুনর্গঠিত পাঠ্য মন্তব্যটি একইভাবে আলাদাভাবে লিখিত ট্যাগ ব্যবহার করে: @param xx: yyyহয়ে যায় :param xx: yyy। দেখুন jetbrains.com/pycharm/webhelp/...
Wernight

1
পুরোপুরি যোগ্যতাসম্পন্ন শ্রেণীর নাম উল্লেখ না করে কেন আমরা পালাতে পারি?
জেসভিন জোস

উত্তর:


85

হ্যাঁ, আপনি পদ্ধতি এবং তাদের পরামিতিগুলির জন্য বিশেষ ডকুমেন্টেশন ফর্ম্যাট ব্যবহার করতে পারেন যাতে পাইচার্মটি প্রকারটি জানতে পারে। সাম্প্রতিক পাইচার্ম সংস্করণ সর্বাধিক সাধারণ ডক ফর্ম্যাটগুলিকে সমর্থন করে

উদাহরণস্বরূপ, পাইচার্ম @ পরিমাপক স্টাইলের মন্তব্যগুলি থেকে প্রকারগুলি বের করে ।

আরও দেখুন reStructuredText এবং docstring নিয়মাবলী (PEP 257)।

আর একটি বিকল্প পাইথন 3 টিকা।

আরও বিশদ এবং নমুনার জন্য দয়া করে পাইচর্ম ডকুমেন্টেশন বিভাগটি দেখুন।


2
আমি মনে করি পাইচার্ম এর ডক ফর্ম্যাটটি কিছুটা বদলেছে (দেখুন jetbrains.com/help/pycharm/… ), তবে ধন্যবাদ! প্যারামিটারগুলিতে ইন্টেলিজেন্সের অভাব আমাকে উন্মাদ করে তুলেছিল।
stubs

46

আপনি যদি পাইথন 3.0.০ বা তার বেশি ব্যবহার করেন তবে আপনি ফাংশন এবং পরামিতিগুলিতে টিকাও ব্যবহার করতে পারেন। পাইচার্ম এগুলি আর্গুমেন্ট বা প্রত্যাবর্তনের মানগুলির প্রত্যাশার ধরণের হিসাবে ব্যাখ্যা করবে:

class King:
    def repress(self, peasant: Person) -> bool:
        peasant.knock_over() # Shows a warning. And there was much rejoicing.

        return peasant.badly_hurt() # Lets say, its not known from here that this method will always return a bool

কখনও কখনও এটি অ-সর্বজনীন পদ্ধতির জন্য দরকারী, যেগুলিতে একটি ডাস্ট্রিংয়ের প্রয়োজন হয় না। একটি অতিরিক্ত সুবিধা হিসাবে, সেই টীকাগুলি কোড দ্বারা অ্যাক্সেস করা যেতে পারে:

>>> King.repress.__annotations__
{'peasant': <class '__main__.Person'>, 'return': <class 'bool'>}

আপডেট : পিইপি 484 হিসাবে, পাইথন 3.5 এর জন্য গৃহীত হয়েছে, এটি টীকাগুলি ব্যবহার করে যুক্তি এবং ফেরতের প্রকার নির্দিষ্ট করার জন্য এটি অফিশিয়াল কনভেনশন।


4
... এবং এমন বেশ কয়েকটি প্যাকেজ রয়েছে যা রান-টাইম টাইপ-চেকিংয়ের জন্য এন্টন্টেশনগুলি ব্যবহার করে। এটি উভয়ই ব্যবহারের পক্ষে সুবিধাজনক এবং দৃ to়তার সাথে একই কাজ করার চেয়ে পড়ার পক্ষে সহজ এবং কেবলমাত্র একইভাবে নির্বাচিতভাবে ব্যবহার করা যেতে পারে। typecheck-decoratorএটি একটি যেমন প্যাকেজ এবং এর ডকুমেন্টেশনে অন্যদের সংক্ষিপ্তসার রয়েছে। (নমনীয়, খুব: আপনি এমনকি টাইপ-
চেকড

5

পাইচার্ম একটি @ টাইপ পাইডোক স্ট্রিং থেকে প্রকারগুলি বের করে। পাইচার্ম ডক্সটি এখানে এবং এখানে এবং এপিডোক ডক্স দেখুন । এটি পাইচর্মের 'উত্তরাধিকার' বিভাগে রয়েছে সম্ভবত এটির কিছু কার্যকারিতা নেই।

class King:
    def repress(self, peasant):
        """
        Exploit the workers by hanging on to outdated imperialist dogma which
        perpetuates the economic and social differences in our society.

        @type peasant: Person
        @param peasant: Person to repress.
        """
        peasant.knock_over()   # Shows a warning. And there was much rejoicing.

প্রাসঙ্গিক অংশটি @type peasant: Personডকস্ট্রিংয়ের লাইন।

আমার উদ্দেশ্য ক্রেজি কোডার বা মূল প্রশ্নকর্তার কাছ থেকে পয়েন্ট চুরি করা নয়, সর্বদাই তাদের বিষয়গুলি তাদের দেওয়া উচিত। আমি কেবল ভেবেছিলাম সহজ উত্তরটি একটি 'উত্তর' স্লটে থাকা উচিত।


2

আমি পাইচার্ম প্রফেশনাল ২০১.1.১ লিখছি পাই ২..7-২..7 কোড লিখছি, এবং আমি দেখতে পেয়েছি যে রিস্ট্রাকচার্ড টেক্সট ব্যবহার করে আমি আরও সফলভাবে উপায়ে প্রকাশ করতে পারি:

class Replicant(object):
    pass


class Hunter(object):
    def retire(self, replicant):
        """ Retire the rogue or non-functional replicant.
        :param Replicant replicant: the replicant to retire.
        """
        replicant.knock_over()  # Shows a warning.

দেখুন: https://www.jetbrains.com/help/pycharm/2016.1/type-hinting-in-pycharm.html#legacy


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.