或者,它们是否可以声明为其他方式?
以下代码不起作用:
class BinaryNode():
self.parent = None
self.left_child = None
它们是否需要在__init__
中声明
发布于 2012-09-05 11:40:49
它们不必在__init__
中声明,但为了使用self
设置实例变量,需要有对self
的引用,而您定义变量的位置则不需要。
然而,
class BinaryNode():
parent = None
left_child = None
def run(self):
self.parent = "Foo"
print self.parent
print self.left_child
输出将是
Foo
None
在评论中回答你的问题,是的。在我的示例中,您可以这样说:
bn = BinaryNode()
bn.new_variable = "Bar"
或者,正如我所展示的,您可以设置一个类级别变量。类的所有新实例都将在实例化时获得类级别变量的副本。
您可能没有意识到可以将参数传递给构造函数:
class BinaryNode(object):
def __init__(self, parent=None, left_child=None):
self.parent = parent
self.left_child = left_child
bn = BinaryNode(node_parent, node_to_the_left)
发布于 2012-09-05 11:48:12
不是的。我喜欢这个东西的@property
变量:
class Data(object):
"""give me some data, and I'll give you more"""
def __init__(self, some, others):
self.some = some
self.others = others
@property
def more(self):
"""you don't instantiate this with __init__, per say..."""
return zip(self.some, self.others)
>>> mydata = Data([1, 2, 3], ['a', 'b', 'c'])
>>> mydata.more
[(1, 'a'), (2, 'b'), (3, 'c')]
发布于 2012-09-05 11:52:48
同样,你也可以有类级别的变量,但我称之为类常量。
class Connection(object):
"""helps you connect to the server at work"""
YOUR_IP = '10.0.9.99'
def __init__(self, username, password):
self.ip = Connection.YOUR_IP
self.un = username
self.pw = password
#...and so on
https://stackoverflow.com/questions/12274179
复制相似问题