Python-klas­sen­va­ri­a­be­len zijn een ge­struc­tu­reer­de manier om gegevens te delen tussen ver­schil­len­de in­stan­ties van een klasse. Als u wij­zi­gin­gen aanbrengt in een klas­sen­va­ri­a­be­le, heeft dit invloed op alle in­stan­ties van de klasse. Dit betekent dat u ze niet telkens opnieuw hoeft te de­fi­ni­ë­ren wanneer ze worden ge­ïn­stan­ti­eerd.

Wat zijn Python-klas­se­va­ri­a­be­len?

In Python maken we klas­se­va­ri­a­be­len binnen een klasse. In te­gen­stel­ling tot in­stan­tie­va­ri­a­be­len, die specifiek zijn voor elke instantie van een klasse, behouden klas­se­va­ri­a­be­len dezelfde waarde voor alle in­stan­ties. Klas­se­va­ri­a­be­len worden doorgaans vóór de con­struc­tor ingesteld en zijn toe­gan­ke­lijk voor elke instantie van de klasse.

Python-klas­se­va­ri­a­be­len zijn handig voor het opslaan van gegevens die van toe­pas­sing zijn op alle in­stan­ties van een klasse, zoals con­fi­gu­ra­tie-in­stel­lin­gen, stan­daard­waar­den of gedeelde statussen binnen een klas­sen­hi­ë­rar­chie. Met klas­se­va­ri­a­be­len kunt u ook klas­se­me­tho­den of -at­tri­bu­ten de­fi­ni­ë­ren waartoe elke instantie toegang heeft, waardoor zowel de func­ti­o­na­li­teit als de structuur van uw code wordt verbeterd.

Wat is de syntaxis van Python-klas­se­va­ri­a­be­len?

Python-klas­se­va­ri­a­be­len worden aan­ge­maakt binnen de klas­se­de­fi­ni­tie en buiten methoden.

class Car:
    total_cars = 0  # Class variable to track the total number of cars
    def __init__(self, brand, model):
        self.brand = brand  # Instance variable for the car brand
        self.model = model  # Instance variable for the car model
        Car.total_cars += 1  # Increment the total number of cars upon each instantiation
    def display_details(self):
        print(f"Brand: {self.brand}, Model: {self.model}")
# Creating instances of Car
car1 = Car("BMW", "X3")
car2 = Car("Audi", "A4")
# Accessing class variable and instance variables
print(f"Total number of cars: {Car.total_cars}")  # Output: 2
car1.display_details()  # Output: Brand: BMW, Model: X3
car2.display_details()  # Output: Brand: Audi, Model: A4
python

Binnen klasse Car de­fi­ni­ë­ren we de klas­se­va­ri­a­be­le total_cars om het totale aantal auto’s bij te houden. De con­struc­tor __init__ wordt aan­ge­roe­pen wanneer een nieuw exemplaar van de klasse wordt aan­ge­maakt. Bij elke in­stan­ti­ë­ring worden de in­stan­tie­va­ri­a­be­len brand en model ingesteld en wordt de klas­se­va­ri­a­be­le total_cars met 1 verhoogd.

Door de methode display_details() aan te roepen, kunnen we de details van de res­pec­tie­ve auto-in­stan­ties weergeven. In een f-string, een Python-string­for­maat­me­tho­de, kunnen we toegang krijgen tot de klas­se­va­ri­a­be­le total_cars om het totale aantal aan­ge­maak­te auto’s weer te geven.

Voor­beel­den van het gebruik van Python-klas­se­va­ri­a­be­len

Toegang, wijziging en over­er­ving spelen een be­lang­rij­ke rol bij het veilig omgaan met klas­se­va­ri­a­be­len in Python.

Toegang tot klas­se­va­ri­a­be­len

Python-klas­se­va­ri­a­be­len zijn toe­gan­ke­lijk via de klas­se­naam of instantie, gevolgd door een punt en de va­ri­a­be­le­naam.

class MyClass:
    class_var = "This is a class variable."
# Using a class name to access a class variable
print(MyClass.class_var)  # Output: This is a class variable.
# Using an instance to access a class variable
obj = MyClass()
print(obj.class_var)  # Output: This is a class variable.
python

In Python kun je op ver­schil­len­de plaatsen toegang krijgen tot klas­se­va­ri­a­be­len:

  • In de con­struc­tor: Je kunt de klas­se­va­ri­a­be­le in de con­struc­tor aanroepen met behulp van het sleu­tel­woord self of de klas­se­naam.
  • In in­stan­tie­me­tho­den: U kunt de klas­se­va­ri­a­be­le in in­stan­tie­me­tho­den aanroepen met behulp van het self -sleu­tel­woord of de klas­se­naam.
  • Buiten de klasse: U kunt de klas­se­va­ri­a­be­le buiten de klasse openen via de ob­ject­re­fe­ren­tie of met behulp van de klas­se­naam.

Klas­se­va­ri­a­be­len wijzigen

Python-klas­se­va­ri­a­be­len kunnen recht­streeks via de klas­se­naam worden gewijzigd. Als een in­stan­tie­va­ri­a­be­le echter dezelfde naam heeft als een klas­se­va­ri­a­be­le en u probeert de variabele via de instantie te wijzigen, wordt er een nieuwe in­stan­tie­va­ri­a­be­le aan­ge­maakt en blijft de klas­se­va­ri­a­be­le on­ge­wij­zigd.

class MyClass:
    class_var = "Original class variable"
obj = MyClass()
print(obj.class_var)  # Output: Original class variable
MyClass.class_var = "Modified class variable"
print(obj.class_var)  # Output: Modified class variable
python

In dit voorbeeld hebben we de klas­se­va­ri­a­be­le class_var over­schre­ven door deze een nieuwe waarde toe te kennen met behulp van de klasse MyClass. De wijziging wordt ver­vol­gens au­to­ma­tisch over­ge­no­men door de obj.

Klas­se­va­ri­a­be­len en over­er­ving

Door over­er­ving kunnen afgeleide klassen toegang krijgen tot de klas­se­va­ri­a­be­len van de ba­sis­klas­se en deze gebruiken zonder ze opnieuw te hoeven de­fi­ni­ë­ren.

class BaseClass:
    base_var = "Base variable"
class DerivedClass(BaseClass):
    pass
print(DerivedClass.base_var)  # Output: Base variable
python

Hier de­fi­ni­ë­ren we een ba­sis­klas­se BaseClass, die de klas­se­va­ri­a­be­le base_var bevat. De afgeleide klasse DerivedClass erft van BaseClass. Door middel van over­er­ving heeft DerivedClass toegang tot de klas­se­va­ri­a­be­le base_var van de ba­sis­klas­se en kan deze gebruiken zonder deze opnieuw te de­fi­ni­ë­ren.

Ga naar hoofdmenu