Wpis z mikrobloga

#programowanie #python

Mirki, chcę zrobić coś takiego w pajtonie, nie znam poprawnej terminologii do tego ale z tyle C co wiem to wskażniki benizy odwołania #!$%@? jakieś

Mam klasę i instance:

class Klasa:
def __init__(self):
self.cyfra = 0

inst = Klasa()
I teraz mam taką funkcję

def zwieksz(a):
a += 10

I, teraz chcę zrobić coś w stylu

zwieksz(inst.cyfra)
ale żeby to zmieniło właśnie zmienną w klasie żeby to działało tak

>>> inst.cyfra = 0
>>> zwieksz(inst.cyfra)
>>> inst.cyfra
10
Jak teraz robię takie coś w pytonszu.

EDIT: @wykop @m__b wyjeb tego nowego programiste w #!$%@? bo tagów kodu nie naprawił
  • 16
@ca1ek: Niestety nie da się tak zrobić z liczbą bo to typ niemutowalny. Tak samo string oraz krotka. Masz dwie możliwości, napisać funcję zwiększ inaczej:

def zwiekszObjekt(o):
    o.cyfra += 10

A jeżeli nie możesz, to możesz spróbować przeciążyć operator += i przekazać cały obiekt:

class Klasa:
    def __init__(self):
        self.cyfra = 0

    def __iadd__(self, a):
        self.cyfra += other.a
        return self

inst = Klasa()
zwieksz(inst)

Na upartego jesteś wstanie napisać obiekt który operuje
@lionbest: @cojawyrabiam: tak fyi to póżniej mam plan zrobić coś klasę i coś takiego, po angielsku jak kolega chciał

incrementor.register(class1.number)
incrementor.register(class2.number)
incrementor.increment_all()

i to zwiększy number we wszystkich zarejestrowanych klasach
@Wypok_spoko: już użyłem rozwiązania od Almagesta i działa. Twoje nie pasuje ze względu na to do czego to robię.

Piszę moduł do łatwiejszego robienia rzeczy w pygame, wziąłem moją pierwszą gierkę w pygame która była tak #!$%@? że miała 1000 linii kodu a miała tylko dwa poziomy zbudowane z trzech sprajtów, i trzy bronie. To potrzebowałem do zrobienia zajebistego input handlera.

tak wygląda kod przykładowy który przesuwa sprite jak się naciśnie