Cookies op Tweakers

Tweakers is onderdeel van DPG Media en maakt gebruik van cookies, JavaScript en vergelijkbare technologie om je onder andere een optimale gebruikerservaring te bieden. Ook kan Tweakers hierdoor het gedrag van bezoekers vastleggen en analyseren. Door gebruik te maken van deze website, of door op 'Cookies accepteren' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt? Bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

[Python] Verwijzing naar variabelen syntax

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0Henk 'm!

  • SydWylde
  • Registratie: juni 2019
  • Laatst online: 26-11-2020
Mijn vraag
Dit is een oefening uit 'Crash course Python. Ik begrijp niet waar de syntax van regel 65 vandaan komt, en met name de twee 'privileges'. Waar verwijst de eerste naar en waar verwijst de tweede naar? Waarom heb je ze dus allebei nodig? In de meeste gevallen kom ik er wel uit door het boek goed te lezen e.d. maar dit is een antwoord op een 'probeer het nu zelf'-oefening en daar staat geen verdere uitleg bij.

Edit: de code werkt dus gewoon wel, de vraag gaat alleen dus over 'waarom het werkt'.

Relevante software en hardware die ik gebruik
Python natuurlijk en Geany

Wat ik al gevonden of geprobeerd heb
Ik had wat vermoedens maar die bleken allemaal fout. Het verwijst niet naar de class name, want die moet met hoofdletter, dus dat kan niet (toch?)

Alvast dank voor de moeite :)


[Voor 7% gewijzigd door SydWylde op 14-06-2020 19:19. Reden: netter maken]

Beste antwoord (via SydWylde op 14-06-2020 20:02)


  • kluyze
  • Registratie: augustus 2004
  • Niet online
Ik vermoed dat hij bedoelt dat er 2 keer privileges gebruikt wordt in het 'eric' object.
Python:
65
eric.privileges.privileges
De instantie eric is van het type Admin. Nu heeft de classe Admin, zo lijkt het, een property privileges van het type Privileges. Dit Privileges type heeft dan weer een property privileges van een array type.

Dus eric.privileges geeft een Privileges object terug, eric.privileges.privileges geeft de array in het Privileges object.

Waarom dit zo gedaan is, weet ik niet, in dit geval zou ik het niet nodig vinden. Als het type Privileges nog andere properties zou bevatten dan is dit misschien wel handig. Ik vermoed dat het hier enkel als illustratie op deze manier gedaan is. Het enige voordeel dat ik hier zie, is dat de privileges een print functie heeft (show_privileges)

Staat in de code de Admin classe ook niet uitgeschreven?

[Voor 8% gewijzigd door kluyze op 14-06-2020 19:38]

Alle reacties


Acties:
  • +1Henk 'm!

  • n3othebest
  • Registratie: januari 2013
  • Laatst online: 09:58
Die eerste eric.priviliges verwijst naar het object eric en dan specifiek het attribuut privileges van dat object.

De eric_priviliges verwijst naar de variabele eric_priviliges zoals gedefinieerd op regel 58.

Wat je op 65 dus doet is de array die op regel 58 aangemaakt is in het object eric schrijven.

Acties:
  • Beste antwoord
  • 0Henk 'm!

  • kluyze
  • Registratie: augustus 2004
  • Niet online
Ik vermoed dat hij bedoelt dat er 2 keer privileges gebruikt wordt in het 'eric' object.
Python:
65
eric.privileges.privileges
De instantie eric is van het type Admin. Nu heeft de classe Admin, zo lijkt het, een property privileges van het type Privileges. Dit Privileges type heeft dan weer een property privileges van een array type.

Dus eric.privileges geeft een Privileges object terug, eric.privileges.privileges geeft de array in het Privileges object.

Waarom dit zo gedaan is, weet ik niet, in dit geval zou ik het niet nodig vinden. Als het type Privileges nog andere properties zou bevatten dan is dit misschien wel handig. Ik vermoed dat het hier enkel als illustratie op deze manier gedaan is. Het enige voordeel dat ik hier zie, is dat de privileges een print functie heeft (show_privileges)

Staat in de code de Admin classe ook niet uitgeschreven?

[Voor 8% gewijzigd door kluyze op 14-06-2020 19:38]


Acties:
  • 0Henk 'm!

  • SydWylde
  • Registratie: juni 2019
  • Laatst online: 26-11-2020
Dank voor de reacties! Hieronder staat de rest van de code, die dus boven de eerste afbeelding hoort. Onderaan die je de Admin classe

[Voor 10% gewijzigd door SydWylde op 14-06-2020 19:45]


Acties:
  • +1Henk 'm!

  • Woy
  • Registratie: april 2000
  • Niet online

Woy

Moderator Devschuur®
@SydWylde zou je je code kunnen vervangen door de daadwerkelijk code, en niet een screenshot, dat kun je doen d.m.v. de [code=python]Jouw code hier[/code] tags, op die manier is de code o.a. beter leesbaar op verschillende devices, en blijft de code ook nog bewaart als jouw image storage niet meer beschikbaar is.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • +1Henk 'm!

  • Morrar
  • Registratie: juni 2002
  • Laatst online: 24-06 17:10
Oei dat is niet zo'n beste crash course zou ik zeggen... Die Privileges en show_privileges hadden beter op de User base class geïmplementeerd kunnen worden naar mijn mening.

Daarnaast is een lege lijst als default argument echt een dikke no go in Python (zie mutable default arguments). Dus ook daar laat de cursus steken vallen...

  • SydWylde
  • Registratie: juni 2019
  • Laatst online: 26-11-2020
Dank voor de aanvullende reacties! Bij dezen de code:

Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
class Users():
    """define a user!"""
    def __init__(self, first_name, last_name, username, age):
        self.first_name = first_name.title()
        self.last_name = last_name.title()
        self.username = username
        self.age = str(age)
        self.login_attempts = 0
        
    def describe_user(self):
        """De gebruiker beschrijven"""
        print("First name: " + self.first_name)
        print("Last name: " + self.last_name)
        print("Username: " + self.username)
        print("Age: " + self.age)
    
    def greet_user(self):
        """de gebruiker begroeten"""
        msg = "\nHello, " + self.first_name + ", how are you?\n"
        print(msg)
        
    def increment_login_attempts(self):
        """het aantal log ins verhogen met 1"""
        self.login_attempts += 1
    
    def reset_login_attempts(self):
        """Het aantal login pogingen resetten naar 0"""
        self.login_attempts = 0
        
class Admin(Users):
    """Een admin maken die bijzondere rechten heeft"""
    def __init__(self, first_name, last_name, username, age):
        """attributen ervan van Users"""
        super().__init__(first_name, last_name, username, age)
        self.privileges = Privileges()

class Privileges():
    """Een aparte klasse voor privileges"""
    def __init__(self, privileges=[]):  
        self.privileges = privileges    
            
    def show_privileges(self):
        """de admin privileges showen"""
        if self.privileges:
            print("\n- Privileges:")
            for privilege in self.privileges:
                print("\t- " + privilege)
        else:
            print("This user is not an admin and therefore has no privileges")
        
eric = Admin('eric', 'ronson', 'ericoman', 45)
eric.describe_user()

eric.privileges.show_privileges()

print("\nAdding privileges...")

eric_privileges = [ 
    'add users',
    'remove users', 
    'reset passwords',
    'rename users',
    ]
    
eric.privileges.privileges = eric_privileges
eric.privileges.show_privileges()


Ik ga er nu even vanuit dat deze code ter illustratie is om diverse punten duidelijk te maken. Het is al eens voorgekomen dat t.b.v uitleg van syntax iets wordt verteld en dat er later wordt ingehaakt op hoe het beter / efficiënter kan. Dat gezegd hebbende, leek dit stuk code mij meteen al omslachtig/inefficiënt, vandaar dat ik die vraag er over had.
Pagina: 1


Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Microsoft Xbox Series X LG CX Google Pixel 5a 5G Sony XH90 / XH92 Samsung Galaxy S21 5G Sony PlayStation 5 Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True