2014-03-03 4 views
0

Допустим, у нас есть конкретизацияПонимание Python класса и базового класса

client = PiHttpClient("192.168.1.234") 
# RPi native GPIO 
gpio = NativeGPIO(client) 
gpio.setFunction(25, "out") 
state = True 

И из кода clients.py меня

class PiMixedClient(): 
    def __init__(self, host, port=8000, coap=5683): 
    def sendRequest(self, method, uri): 

class PiHttpClient(PiMixedClient): 
    def __init__(self, host, port=8000): 
     PiMixedClient.__init__(self, host, port, -1) 
class NativeGPIO(GPIO): 
    def __init__(self, client): 
     RESTAPI.__init__(self, client, "/GPIO") 

class GPIO(Device): 
    def __init__(self, client, name): 
     Device.__init__(self, client, name, "digital") 

    def getFunction(self, channel): 
     return self.sendRequest("GET", "/%d/function" % channel) 

    def setFunction(self, channel, func): 
     return self.sendRequest("POST", "/%d/function/%s" % (channel, func)) 

class Device(RESTAPI): 
    def __init__(self, client, name, category): 
     RESTAPI.__init__(self, client, "/devices/" + name + "/" + category) 

class RESTAPI(): 
    def __init__(self, client, path): 
     self.client = client 
     self.path = path 

    def sendRequest(self, method, path): 
     return self.client.sendRequest(method, self.path + path) 
  1. Таким образом, из сказанного выше, когда он делает PiHttpClient ("192.168.1.234") host = "192.168.1.234", правильно? но init (self, host, port = 8000) ищет себя, хост. Я не видел, как себя передавали в качестве аргумента.

  2. затем внутри PiMixedClient, потому что PiHttpClient расширение PiMixedClient, то ее хозяина и само должно быть таким же, как PiMixedClient

  3. затем GPIO = NativeGPIO (клиент) снова внутри INIT из NativeGPIO _ инициализации (self, client), от вызывающей функции мне не нужно снабжать себя?

  4. поэтому при расширении до самого низкого уровня он становится базовым классом RESTAPI, его метод sendRequest принадлежит клиенту, который из sendRequest класса PiMixedClient?

+0

исправьте ваш отступ .. – adil

ответ

0
  1. Да - метод питона всегда получает себя в качестве первого аргумента, вы можете захотеть взглянуть на docs на классы.
  2. Да
  3. -
  4. No. Вам не нужно вручную Suply самостоятельно, если вы создаете экземпляр класса (вы делаете, если вы хотите, чтобы переопределить метод инициализации)
  5. Да

Но на самом деле, взгляните на документы python, они довольно хороши.

Смежные вопросы