理解Python类和基类

时间:2014-03-03 18:04:38

标签: 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”)时,主机=“192.168.1.234”,对吧?但 init (self,host,port = 8000)寻找self,host。我没有看到自己作为论点被传入。

  2. 然后在PiMixedClient中,因为PiHttpClient扩展了PiMixedClient,那么它的主机和self应该和PiMixedClient一样

  3. 然后gpio = NativeGPIO(客户端)再次在NativeGPIO _ init (自我,客户端)的 init 内部,从我不需要的调用函数供给自己?

  4. 所以当扩展到最低级别它变成RESTAPI基类时,它的sendRequest方法来自客户端,它来自PiMixedClient类的sendRequest?

1 个答案:

答案 0 :(得分:0)

  1. 是的 - 一个python方法总是将self作为第一个参数,你可能想看一下类的docs
  2. -
  3. 否。如果你创建了一个类的实例,你不需要手动提供自我(如果你想覆盖init方法,你就可以这样做)。
  4. 但实际上,看看python文档,它们非常好。