পাইথন 3 এ __তক্ষেত্র__ ময়লা বৈশিষ্ট্যের অর্থ কী?


17

সদ্য প্রকাশিত পাইথন ৩.৮ এ একটি নতুন ধরণের টিকা আছে typing.TypedDict। এর ডকুমেন্টেশনে উল্লেখ আছে যে

অন্তর্দর্শন জন্য টাইপ তথ্য মাধ্যমে অ্যাক্সেস করা যেতে পারে Point2D.__annotations__এবং Point2D.__total__। [....]

যদিও __annotations__সুপরিচিত, পিইপি 3107 এ চালু হওয়ার পরে , আমি কোনও তথ্য খুঁজে পাচ্ছি না __total__। কেউ এর অর্থ ব্যাখ্যা করতে পারে এবং সম্ভব হলে কর্তৃত্ববাদী উত্সগুলিতে লিঙ্ক করতে পারে?


4
বৈশিষ্টসূচক। ইন্টারন্যালগুলির 99% typingনথিভুক্ত নয়, এবং যে অংশটি নথিভুক্ত রয়েছে খুব খারাপ।
অরণ-ফে

উত্তর:


3

আমি অনুমান করছি যে __total__ক্ষেত্রটি উদাহরণস্বরূপ সম্পূর্ণ হওয়া উচিত (ডিফল্ট) বা না (সমস্ত ক্ষেত্র (চ্ছিক)। আমি পিইপি 589 এ আমার অনুসন্ধান শুরু করেছি , যা TypedDictসম্পূর্ণতার পরিচয় দেয় এবং বর্ণনা করে। এটি একটি totalযুক্তি ব্যবহার করেছিল , যা class সিনট্যাক্সের জন্য ডেন্ডার-স্টাইলটির নামকরণ করা অর্থপূর্ণ হবে । তবে, কখন এ জাতীয় নামকরণ হয়েছিল তা আমি খুঁজে পাইনি।

মাইপাই-তে অনুসন্ধান করা, যা প্রকৃত প্রকারের চেকার যা এই টীকাগুলি সম্পর্কে চিন্তা করে, সেখানে একই রকমের ডকুমেন্টেশন TypedDictএবং সম্পূর্ণতা রয়েছে , তবে আবার ডন্ডার সিনট্যাক্সের কোনও উল্লেখ নেই। এর বাস্তবায়নে TypedDictTypeখননের ফলে আরও বিভ্রান্তির সৃষ্টি হয়েছিল, যেমন টাইপ.পাইয়ের মোট ক্ষেত্র নেই, তবে পৃথক itemsএবং required_keys। সামগ্রিকতা বোঝাতে পারে items.keys()==required_keysতবে বাস্তবায়নটি বিভিন্ন অনুমান করে যেমন একা can_be_falseনির্ভর করা itemstotal=Falseনীতিগতভাবে required_keysখালি হওয়া উচিত ।

_ টাইপডিক্টমিটারের সিপিথন উত্সটি অন্তত প্রকাশ করে যে totalআর্গুমেন্ট এবং __total__ডান্ডারটি এক এবং একই, যদিও উত্স TypedDictনিজেকে "শীঘ্রই যুক্ত হতে পারে" হিসাবে বর্ণনা করে।


আপাতত এটি গ্রহণ করা - অন্য কিছু না হলে সম্ভবত এটি অন্যকে এগিয়ে আসতে এবং আপনার উত্তরটিকে খণ্ডন করতে আরও আগ্রহী করে তুলবে: ডি
অ্যান্টি হাপাল

আমি ব্যক্তিগতভাবে সন্দেহ করি can_be_falseজিনিসটি একটি মাইপাই বাগ, সম্ভবত শুরু থেকে fieldsচ্ছিক ক্ষেত্রগুলি না রাখার পরিকল্পনা না করার সাথে সম্পর্কিত।
ইয়ান ভার্নিয়ার

1

TypedDictপিইপি 589 এর মাধ্যমে পাইথন 3.8 এ গৃহীত হয়েছিল । পাইথন থেকে, এটি __total__বুলিয়ান পতাকাটি Trueডিফল্টরূপে সেট করা হয়:

tot = TypedDict.__total__
print(type(tot))
print(tot)

# <class 'bool'>
# True

অন্যান্য পদে উল্লেখিত, এই পদ্ধতি বিস্তারিত সীমিত ডক্স , কিন্তু @Yann একপ্রকার সুক্ষ্ম স্কেল লিঙ্ক CPython সোর্স কোড জোরালোভাবে পরামর্শ __total__নতুন সঙ্গে সম্পর্কযুক্ত totalশব্দ পাইথন 3.8 চালু :

# cypthon/typing.py

class _TypedDictMeta(type):
    def __new__(cls, name, bases, ns, total=True):
        """Create new typed dict class object.
        ...
        """
        ...
        if not hasattr(tp_dict, '__total__'):
            tp_dict.__total__ = total
        ...

এটা কিভাবে কাজ করে?

সংক্ষিপ্তসার : ডিফল্টরূপে, একটি সংজ্ঞায়িত তাত্ক্ষণিকতার সময় সমস্ত কীগুলি প্রয়োজন TypedDicttotal=Falseএই বিধিনিষেধকে ওভাররাইড করে এবং alচ্ছিক কীগুলির অনুমতি দেয়। নিম্নলিখিত বিক্ষোভ দেখুন।

প্রদত্ত

একটি পরীক্ষা ডিরেক্টরি ট্রি:

এখানে চিত্র বর্ণনা লিখুন

কোড

পরীক্ষা ডিরেক্টরি ফাইল:

# rgb_bad.py

from typing import TypedDict


class Color(TypedDict):
    r: int
    g: int
    b: int
    a: float


blue = Color(r=0, g=0, b=255)                     # missing "a"

# rgb_good.py

from typing import TypedDict


class Color(TypedDict, total=False):
    r: int
    g: int
    b: int
    a: float


blue = Color(r=0, g=0, b=255)                     # missing "a"

ডেমো

যদি কোনও কী অনুপস্থিত থাকে তবে মাইপি কমান্ডলাইনে অভিযোগ করবে:

> mypy code/rgb_bad.py
code\rgb_bad.py:11: error: Key 'a' missing for TypedDict "Color"
...

Perm total=Falseচ্ছিক কীগুলির অনুমতি নির্ধারণ :

> mypy code/rgb_good.py
Success: no issues found in 1 source file

আরো দেখুন

  • সম্পূর্ণরূপে প্রদর্শন করে আর। হেট্টিংগার টুইট করেছেন
  • পিইপি 589 এর সম্পূর্ণতার উপর পিইপি বিভাগ
  • প্রকারের উপর পাইথনের নিবন্ধ বিভাগ এবং TypedDictরিয়েল পাইথন দ্বারা 3.8 পাইথনে
  • typing-extensionsTypedDictপাইথন 3.5, 3.6 ব্যবহার করার জন্য প্যাকেজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.