繁体   English   中英

通过传递 self 作为参数来实例化 class

[英]Instantiating a class by passing self as argument

我遇到了一些 python 示例,其中 class 实例是通过调用 class 并将“self”传递给它来创建的。 我似乎无法理解它的含义以及我们何时会使用这样的构造。

下面是一个示例摘录,其中一个 class 在另一个 class 中实例化。 我“认为”我也见过类似objA = Class_def(self)的东西。 我不记得我在哪里看到的,所以最好知道它是否可能。

class BaseState(object):

    def __init__(self, protocol):
        self.protocol = protocol
    
    def connect(self, request):
        state = self.__class__.__name__



class IdleState(BaseState):

    def connect(self, request):
        return self.protocol.doConnect(request)



class ConnectingState(BaseState):

    def handleCONNACK(self, response):
        self.protocol.handleCONNACK(response)



class ConnectedState(BaseState):


    def disconnect(self, request):
        self.protocol.doDisconnect(request)


class BaseProtocol(Protocol):

    def __init__(self, factory):

    ###    
    # what is happening here -
    ###

        self.IDLE        = IdleState(self)
        self.CONNECTING  = ConnectingState(self)
        self.CONNECTED   = ConnectedState(self)
        self.state       = self.IDLE

一般来说,class 总是作为参数传递给它的方法,这就是它们的工作方式。 尽管在前 C++ 中它是隐式的,但 Python 明确地做到了这一点。

在 BaseProtocol 中,您正在初始化BaseProtocol class 的成员。 初始化时, self是多余的,因为 IdleState 方法的构造函数不需要访问它的实例变量,所以你可以删除它。 但是,如果您正在使用成员IDLE做某事,例如调用使用其实例变量的方法,则需要传递self

了解更多: https://www.knowledgehut.com/blog/programming/self-variabe-python-examples

这样做是绝对有可能的,因为self是 python 传递的默认 object -

class a:
  def __init__(self,__self,x):
    self.x=x
    print(self.x) #the local x that is passed into the object
    print(__self.x) #the x that is in the self that is passed into the object

class b:
  def __init__(self,x):
    self.x=x
    obj=a(self,'foo')

obj=b('baz') #should print 'foo', then 'baz'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM