[英]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.