首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >所有的Python实例变量都必须在def __init__中声明吗?

所有的Python实例变量都必须在def __init__中声明吗?
EN

Stack Overflow用户
提问于 2012-09-05 11:39:21
回答 3查看 13.8K关注 0票数 12

或者,它们是否可以声明为其他方式?

以下代码不起作用:

代码语言:javascript
复制
class BinaryNode():
    self.parent = None
    self.left_child = None

它们是否需要在__init__中声明

EN

回答 3

Stack Overflow用户

发布于 2012-09-05 11:40:49

它们不必在__init__中声明,但为了使用self设置实例变量,需要有对self的引用,而您定义变量的位置则不需要。

然而,

代码语言:javascript
复制
class BinaryNode():
    parent = None
    left_child = None

    def run(self):
        self.parent = "Foo"
        print self.parent
        print self.left_child

输出将是

代码语言:javascript
复制
Foo
None

在评论中回答你的问题,是的。在我的示例中,您可以这样说:

代码语言:javascript
复制
bn = BinaryNode()
bn.new_variable = "Bar"

或者,正如我所展示的,您可以设置一个类级别变量。类的所有新实例都将在实例化时获得类级别变量的副本。

您可能没有意识到可以将参数传递给构造函数:

代码语言:javascript
复制
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)
票数 13
EN

Stack Overflow用户

发布于 2012-09-05 11:48:12

不是的。我喜欢这个东西的@property变量:

代码语言:javascript
复制
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')]
票数 2
EN

Stack Overflow用户

发布于 2012-09-05 11:52:48

同样,你也可以有类级别的变量,但我称之为类常量。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12274179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档