[Python] Nested Classes and Scopes

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Xuj
  • Registratie: November 2009
  • Laatst online: 05-06 11:08
Beste mede-Tweakers,

Aangezien ik meerdere methodes van programmeren probeer te beheersen, ben ik een beetje gaan spelen met objectgeoriënteerd programmeren. Of tenminste, voor zover het me alukt.

Nu heb ik:
Python: vraag.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class A(object):

    class B(object):
        
        def __init__(self, foo):
            self.foo = foo
    
    def __init__(self, bar):
        self.bar = bar

    def func1(self, param):
        return param + 1

    def func2(self, param):
        return func1(B(param))

** De code is opgesteld voor de vraag. Daadwerkelijke code is een stuk langer, maar volgt hetzelfde systeem.
Ik heb zo'n gevoel dat ik misschien verkeerd bezig ben... **

Het eerste wat ik krijg en waar ik natuurlijk niet vrolijk van word, is:

code:
1
NameError: global name 'func1' is not defined


Dit kon ik opgelost krijgen, door er self.func1() van te maken.

Daarna krijg ik weer een NameError, ditmaal dat global name B not defined is. Dit heb ik opgelost door nogmaals een self ervoor te zetten en weer puntnotatie te gebruiken.

Echter heb ik gevoel dat het niet zo zou moeten. Ik geloof dat ik ergens iets van self, parent had gelezen, maar ik heb het helaas niet meer terug kunnen vinden...

Hulp wordt gewaardaard. :)

Acties:
  • 0 Henk 'm!

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

Beide oplossingen zijn correct vziw.

ASSUME makes an ASS out of U and ME


Acties:
  • 0 Henk 'm!

  • Xuj
  • Registratie: November 2009
  • Laatst online: 05-06 11:08
Hmm.. Dan zal het wel aan mij gelegen hebben.

Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Nu online

RayNbow

Kirika <3

Naast self.B kun je ook A.B gebruiken.

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • wjv
  • Registratie: December 2003
  • Laatst online: 16:35

wjv

Of class B naast class A definieren, ipv genest.

Alles wat binnen class A gedefinieerd is kan je ook alleen gebruiken middels een instantie van class A (dus self.), of door de klasse A te gebruiken (dus A.)

Acties:
  • 0 Henk 'm!

Verwijderd

RayNbow schreef op donderdag 04 november 2010 @ 14:11:
Naast self.B kun je ook A.B gebruiken.
Ik zou eigenlijk geen legitieme reden hiervoor kunnen verzinnen:
  • Binnen de class zelf kun je het best 'self' gebruiken, zodat je later nog de naam van de class kan veranderen.
  • Buiten de A-class de B-class proberen te gebruiken is (uitgaande van jouw voorbeeld) sowieso geen goed idee, dan hoor je hem IMHO niet te nesten.
Pagina: 1