Prima pugnalata alle classi Python ... quando ho bisogno di "me stesso"?

2

Qualcuno potrebbe dare un'occhiata a questo e fammi sapere se ho macellato qualcosa. È solo una semplice definizione di classe in python, ma non ho sviluppatori locali per assicurarmi che io stia usando il linguaggio giusto. Usare 'sé' è così imbarazzante e non so se è necessario.

import time
import pexpect
from datetime import datetime
import deviceModelconfigs
from kafka import KafkaClient, KeyedProducer, HashedPartitioner, RoundRobinPartitioner

class Device():
    def __init__(self, roomName, ip, model):
        self.model = model
        self.ip = ip
        self.roomName = roomName
        self.codes = deviceModelconfigs.setCodes(self.model)
        self.powerStatus = 'na'
        self.signalStatus = 'na'
        self.networkStatus = 'na'

    def connect(self):
        self.child = pexpect.spawn('telnet '+ self.ip + ' 2001')


    def sendMessage(self):
        print ("devices", self.roomName, str("{\"timestamp\":\"" +  str(datetime.utcnow().isoformat()) +
                "\",\"roomName\":\""+ self.roomName +
                    "\",\"powerStatus\":\""+ self.powerStatus +
                    "\",\"signalStatus\"\""+ self.signalStatus +
                    "\",\"networkStatus\":\""+ self.networkStatus +
                "\",\"deviceModel\":\""+ self.model +
                "\",\"deviceType\":\""+ self.codes['deviceType'] + "\"}"))

    def testPower(self):
        try:
            self.child.sendline(self.codes['pwrStCmd'])
            self.child.expect(self.codes['pwrStOnRe'], timeout=5)
            status = 'on'
        except:
            try:
                self.child.sendline(self.codes['pwrStCmd'])
                self.child.expect(self.codes['pwrStOffRe'], timeout=5)
                status = 'off'
            except:
                status = 'na'
        return status

    def testAll(self):
        self.powerStatus = Device.testPower(self)
        Device.sendMessage(self)
        self.child.terminate(True)

jeff = Device('FM1-200','10.1.174.12','WD510U')
jeff.connect()
jeff.testAll()
    
posta schumacherj 18.02.2015 - 00:36
fonte

1 risposta

4

Hai bisogno di self quando vuoi fare riferimento all'istanza di una classe all'interno della classe stessa.

Ad esempio, un metodo di istanza può chiamare altri metodi o proprietà di istanza o utilizzare campi di istanza.

Se hai utilizzato altri linguaggi orientati agli oggetti, potresti avere l'abitudine di usare this . Python self è simile (mentre non identico) a this in altre lingue.

L'utilizzo di self nel tuo codice di esempio sembra corretto.

Nota che:

  • Potresti prendere in considerazione la sostituzione di stringhe come "{\"timestamp\":\"" con il '{"timestamp":"' più leggibile.

  • Considera l'utilizzo della formattazione di stringhe. Due modi più diffusi per formattare le stringhe in Python sono % e .format . Se non sei sicuro di quale utilizzare, questa risposta su Stack Overflow può essere di aiuto.

  • Usi le stringhe per descrivere gli stati. Anche se questo è un approccio accettabile, potresti essere interessato anche alle enumerazioni di Python

  • Importa quattro tipi da kafka . Hai considerato di utilizzare solo import kafka ? Questa risposta su Programmers.SE spiega la differenza tra import e from ... import .

  • In testPower , hai la duplicazione del codice. Prendi in considerazione l'estrazione di righe contenenti sendline e expect istruzioni in un metodo separato.

risposta data 18.02.2015 - 00:53
fonte

Leggi altre domande sui tag