Kezdőoldal » Számítástechnika » Programozás » Python, class init-ben help text?

Python, class init-ben help text?

Figyelt kérdés

Egy funkcióban egyszerűen adhatunk help textet egy arg-hoz, mint:

def asd(title):

"""

help text here

"""

return 0


Így ha pl VS Code-ban CTRL+Space-t nyomsz, kiírja, hogy ide a "title" arg-ot kell beírni és alá a "help text here" szöveget. Ez szuper!


De mondjuk van egy Class-om, amiben van egy def __init__, ebben pedig van 3 arg amit meg kell adni. Ezeknek külön külön akarnék help textet adni. Ezt hogyan lehet megoldani?


ez jelzi a kurzort: _

Pl ha a class neve Valami, akkor

myobj = Valami(_)

[ itt a help text a titlehez ]

ha nyomsz egy vesszőt, azaz a következő arg-ot adod meg:

myobj = Valami("example",_)

[ itt a helptext a számhoz ]


2021. nov. 3. 21:26
 1/10 anonim ***** válasza:

Javaslom az alábbi kiegészítőt:

* [link]


Továbbá olvasnivalónak:

* [link]

* [link]

2021. nov. 4. 01:30
Hasznos számodra ez a válasz?
 2/10 anonim ***** válasza:

Illetve érdemes elolvasni a Google kódolási stílus javaslatának a kód kommentelésére tett javaslatait:

[link]

2021. nov. 4. 01:58
Hasznos számodra ez a válasz?
 3/10 A kérdező kommentje:

mmh, itt az a gond hogy ha pl van 2 classom és az egyiket a másikból akarom következtetni, akkor ez nem fog működni, mert felülírják egymást.

pl class A:

""" asd """

class B(A):

""" dsa """


akkor bármit teszel, csak a "dsa" lesz kiírva, ráadásul a docstringeket nem lehet "összevonni" sajnos.

2021. nov. 4. 14:58
 4/10 anonim ***** válasza:

Mert a python felépítésének logikájával nem asszertív és nem konzisztens.

Bármikor megtehetjük például hogy vizsgáljuk hogy típus-e az adott objektum : (Hangos szóköz csak a gyk szóközök lenyelése ellen írtam a return elé, sima szóköz lenne igazából)

def isType(a):

__return type(a) == type


Így isType(A) az True , de ha példányosítjuk a = A() akkor isType(a) már False, hiszen nem az.

Továbbá lekérhetjük miből öröklődik B osztály B.__bases__ -el. Egy tuple-t fog visszaadni, abból kiindulva hogy többszörös öröklődésben is résztvehetne, annyi elemű a visszaadott tuple ahányszoros az öröklődés.

Azt hogy belőle milyen alosztályok lettek azt a B.__subclasses__() -el tudhatjuk meg .

Rekurzívan be is lehet járni valahonnan kiindulva melyik/melyek az őse(i), melyik/melyek az alosztálya(i). A többit a kreativitásodra bízom.

2021. nov. 4. 19:21
Hasznos számodra ez a válasz?
 5/10 zozo256 ***** válasza:
lehet érdemesebb lenne issubclass-t használni az isType függvéyben, mert ez így az azokra a classokra, amiknek nem "type" a metaclass-uk False-t ad vissza
2021. nov. 5. 13:45
Hasznos számodra ez a válasz?
 6/10 anonim ***** válasza:

Igen, azt lehetett volna jobban, ez egy szemantikai anomália, hogy van olyan típus ami nem típus típusú.

issubclass(a,object), viszont ha "a" nem típus akkor TypeError kivételt dob. Viszont mutatok olyan osztályt amire szintén kivételt dob

class Meta:

__def __init__(cls, name, bases, dct):

____pass


class Bar(metaclass=Meta):

__pass


issubclass(Bar,object) kivételt dob.


Így:

def isType(a):

__try:

____issubclass(a,object)

__except TypeError:

____return False

__return True


vagy így implementálva:

def isType(a):

__try:

____return issubclass(a,object)

__except TypeError:

____return False


isType(Bar) az False


Ugyanakkor

import inspect

inspect.isclass(Bar) szinén False értéket ad vissza.

Ezek szerint Bar az nem osztály, mondjuk példányosítani se lehet.

Az inspect.isclass bármire próbáltam amit ismerek modulba lévő valamilyen típus vagy alap típust arra az elvárt módon visselkedett, de az isType ezen változata is (a múltkori nem minden esetben).

2021. nov. 5. 15:33
Hasznos számodra ez a válasz?
 7/10 zozo256 ***** válasza:

Várj, hülyeséget írtam, isinstance-re gondoltam issubclass helyett. Valahogy így:


def isType(a):

__return isinstance(a, type)



A Bar az itt osztály lesz, csak mivel a Meta definíciójánál lemaradt, hogy az a "type" subclass-a legyen, ezért sem a __call__-t nem tudja honnan szedni a Bar (ezért nem tudod ugye példányosítani sem), se nem a __subclasscheck__, (meg __instancecheck__-et sem) tudja honnan szedni, mert a Meta-nal nincsenek olyan metódusai, és ha azok definiálatlanok, akkor asszem False-t adnak vissza. És végső soron az inspect.isclass az talán ezeket hívja valamikor, és ott bukik el. Remélem nem tévedtem nagyot most :D

2021. nov. 5. 18:51
Hasznos számodra ez a válasz?
 8/10 zozo256 ***** válasza:
Lehet nem pontosan írtam, de valami tuti ezekkel lesz, csak lusta vagyok már kidiggelni :D
2021. nov. 5. 19:10
Hasznos számodra ez a válasz?
 9/10 A kérdező kommentje:
Köszi mindenkinek! :D
2021. nov. 5. 21:44
 10/10 anonim ***** válasza:

Néztem az inspect.isclass pont úgy van implementálva (behúzások hiányáért elnézést, gyk hibája ):

def isclass(object):

"""Return true if the object is a class.


Class objects provide these attributes:

__doc__ documentation string

__module__ name of module in which this class was defined"""

return isinstance(object, type)


Használjuk inkább ezt az isclass függvényt szerintem.


Metaosztályt nemigen implenetáltam, de a minimális ilyen új osztály:

class Meta(type):

__pass


Ez Foo osztály már példányosítható:

class Foo(metaclass=Meta):

__pass


Vagy "értelmesen" egy új Metaclass implementálásából ilyesmiből lehet kiindulni, persze most nem írtam magyarázatokat stb. a kérdés nem is erről szólt:


class Meta(type):

__def __init__(cls, *args, **kws):

____foo1(cls)

____...

def __cmp__(cls, other):

__if not isinstance(other, Meta):

____return -1

__if cls.__name__ == other.__name__:

____return 0

__...

def ...

2021. nov. 6. 13:43
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!