Python-klas­se­va­ri­ab­ler er en struk­tu­re­ret måde at dele data mellem for­skel­li­ge instanser af en klasse. Hvis du foretager ændringer i en klas­se­va­ri­a­bel, påvirker det alle instanser af klassen. Det betyder, at du ikke behøver at om­de­fi­ne­re dem hver gang, de in­stan­si­e­res.

Hvad er Python-klas­se­va­ri­ab­ler?

I Python opretter vi klas­se­va­ri­ab­ler inden for en klasse. I mod­sæt­ning til in­stansva­ri­ab­ler, som er spe­ci­fik­ke for hver instans af en klasse, bevarer klas­se­va­ri­ab­ler den samme værdi for alle instanser. Klas­se­va­ri­ab­ler oprettes typisk før kon­struk­tø­ren og kan tilgås af enhver instans af klassen.

Python-klas­se­va­ri­ab­ler er nyttige til lagring af data, der gælder for alle fo­re­kom­ster af en klasse, såsom kon­fi­gu­ra­tions­indstil­lin­ger, stan­dard­vær­di­er eller delte tilstande på tværs af en klas­se­hie­rar­ki. Klas­se­va­ri­ab­ler giver dig også mulighed for at definere klas­se­me­to­der eller at­tri­but­ter, som alle fo­re­kom­ster kan få adgang til, hvilket forbedrer både funk­tio­na­li­te­ten og struk­tu­ren i din kode.

Hvad er syntaksen for Python-klas­se­va­ri­ab­ler?

Python-klas­se­va­ri­ab­ler oprettes inden for klas­se­de­fi­ni­tio­nen og uden for metoderne.

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

Inden for klasse Car definerer vi klas­se­va­ri­ab­len total_cars for at holde styr på det samlede antal biler. Kon­struk­to­ren __init__ kaldes, når en ny instans af klassen oprettes. Ved hver in­stan­si­e­ring indstil­les in­stansva­ri­ab­ler­ne brand og model, og klas­se­va­ri­ab­len total_cars øges med 1.

Ved at kalde metoden display_details() kan vi vise de­tal­jer­ne for de respek­ti­ve bil­in­stan­ser. I en f-streng, en Python-streng­for­mat­me­to­de, kan vi få adgang til klas­se­va­ri­ab­len total_cars for at vise det samlede antal oprettede biler.

Eksempler på brug af Python-klas­se­va­ri­ab­ler

Adgang, ændring og arv spiller en central rolle i sikker hånd­te­ring af klas­se­va­ri­ab­ler i Python.

Adgang til klas­se­va­ri­ab­ler

Python-klas­se­va­ri­ab­ler tilgås via klassens navn eller instans, ef­ter­fulgt af en prik og va­ri­a­bel­nav­net.

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

I Python kan du få adgang til klas­se­va­ri­ab­ler for­skel­li­ge steder:

  • I kon­struk­tø­ren: Du kan kalde klas­se­va­ri­ab­len i kon­struk­tø­ren ved hjælp af enten nøg­le­or­det self eller klassens navn.
  • I in­stans­me­to­der: Du kan kalde klas­se­va­ri­ab­len i in­stans­me­to­der ved hjælp af enten nøg­le­or­det self eller klassens navn.
  • Uden for klassen: Du kan få adgang til klas­se­va­ri­ab­len uden for klassen via ob­jek­t­re­fe­ren­cen eller ved hjælp af klassens navn.

Ændring af klas­se­va­ri­ab­ler

Python-klas­se­va­ri­ab­ler kan ændres direkte via klassens navn. Hvis en in­stansva­ri­a­bel har samme navn som en klas­se­va­ri­a­bel, og du forsøger at ændre variablen via instansen, oprettes der imid­ler­tid en ny in­stansva­ri­a­bel, og klas­se­va­ri­ab­len forbliver uændret.

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

I dette eksempel har vi over­skre­vet klas­se­va­ri­ab­len class_var ved at tildele den en ny værdi ved hjælp af klassen MyClass. Ændringen bliver derefter au­to­ma­tisk overtaget af instansen obj.

Klas­se­va­ri­ab­ler og arv

Arv gør det muligt for afledte klasser at få adgang til og bruge ba­sis­klas­sens klas­se­va­ri­ab­ler uden at skulle om­de­fi­ne­re dem.

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

Her definerer vi en ba­sis­klas­se BaseClass, som in­de­hol­der klas­se­va­ri­ab­len base_var. Den afledte klasse DerivedClass arver fra BaseClass. Gennem arv kan DerivedClass få adgang til klas­se­va­ri­ab­len base_var i ba­sis­klas­sen og bruge den uden at om­de­fi­ne­re den.

Gå til ho­ved­me­nu­en