Hur kan jag passera ett objekt som argument för en klass i Python?

Permalänk

Hur kan jag passera ett objekt som argument för en klass i Python?

Jag har programmerat länge i Java och det är samma logik som i Java som i Python. Men jag lyckas inte att passera ett argument i Python.

Jag har en dataklass här:

class TheList(): def __init__(self): self.sampleTime = 0 self.nparameter = 0 self.setPointT0 = 0 self.setPointT1 = 0 self.setPointT2 = 0 self.temp0Array = [] self.temp1Array = [] self.temp2Array = [] self.estimationDelaySeconds = 0

Den vill jag ha som argument i denna fil:

import DataList class Connection(): def __init__(self, dataList): self.dataList = dataList

Jag initiserar objektet via denna klass.

import TalkWithJava, DataList def main(): dataList = DataList.TheList() T = TalkWithJava.Connection(dataList) if __name__ == '__main__': main()

Det är fokus på objektet dataList. Jag får inte fram fälten när jag använder dataList i klassen Connection(). Varför inte då?

Permalänk
Medlem

@heretic16:
Nu är jag inte helt hundra men tror att

self.dataList = dataList

i python blir att du försöker initiera ett object med en referens.

exempelvis om du har

class TheList(): def __init__(self): self.sampleTime = 0 self.nparameter = 0 self.setPointT0 = 0 self.setPointT1 = 0 self.setPointT2 = 0 self.temp0Array = [] self.temp1Array = [] self.temp2Array = [] self.estimationDelaySeconds = 0 import DataList class Connection(): def __init__(self, dataList): self.dataList = dataList

så om vi för enkelhetensskull ändrar namnen på det du skapar?

>>>MinData = TheList() >>>Listan1 = Connection(MinData) >>>Connection.dataList <__main__.MinData object at "what ever mem loc">

Om du vill generera en ny dataList behöver du inte skicka den gamla då du har importerat classen, om du vill använda den gamla måste du ändra så att du inte bara ger värdet av en referens eller använda dig av den referensen(troligen de lättare om du inte vill skicka massa data).

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood

Permalänk
Skrivet av Ferrat:

@heretic16:
Nu är jag inte helt hundra men tror att

self.dataList = dataList

i python blir att du försöker initiera ett object med en referens.

exempelvis om du har

class TheList(): def __init__(self): self.sampleTime = 0 self.nparameter = 0 self.setPointT0 = 0 self.setPointT1 = 0 self.setPointT2 = 0 self.temp0Array = [] self.temp1Array = [] self.temp2Array = [] self.estimationDelaySeconds = 0 import DataList class Connection(): def __init__(self, dataList): self.dataList = dataList

så om vi för enkelhetensskull ändrar namnen på det du skapar?

>>>MinData = TheList() >>>Listan1 = Connection(MinData) >>>Connection.dataList <__main__.MinData object at "what ever mem loc">

Om du vill generera en ny dataList behöver du inte skicka den gamla då du har importerat classen, om du vill använda den gamla måste du ändra så att du inte bara ger värdet av en referens eller använda dig av den referensen(troligen de lättare om du inte vill skicka massa data).

Lustigt! Jag bytte bara från dataList till theList och då fungerar det...

class Connection(): def __init__(self, theList): self.theList = theList

Så var det något att man kan inte döpa ett objekt efter vad filens namn heter, trots att filens namn börjar på stor bokstav och objektet börjar på liten bokstav?

Permalänk
Medlem

@heretic16:
Bra att det löste sig
Kan vara att själva klassen tar namnet och därav fungerar det inte eller så, var ett tag sedan jag höll på aktivt med python

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood