首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >__init__()内部和外部变量之间的差异

__init__()内部和外部变量之间的差异
EN

Stack Overflow用户
提问于 2009-10-08 11:25:28
回答 5查看 168.1K关注 0票数 270

除了名称之外,这些类之间还有什么区别吗?

代码语言:javascript
复制
class WithClass ():
    def __init__(self):
        self.value = "Bob"
    def my_func(self):
        print(self.value)

class WithoutClass ():
    value = "Bob"

    def my_func(self):
        print(self.value)

如果我使用或不使用__init__方法来声明变量value,有什么区别吗

我主要担心的是,我会以一种方式使用它,当这将导致我未来的进一步问题。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-10-08 11:29:15

__init__外部设置的变量属于该类。它们由所有实例共享。

__init__ (和所有其他方法函数)中创建并以self.为前缀的变量属于对象实例。

票数 320
EN

Stack Overflow用户

发布于 2017-09-07 01:51:35

代码语言:javascript
复制
class User(object):
    email = 'none'
    firstname = 'none'
    lastname = 'none'

    def __init__(self, email=None, firstname=None, lastname=None):
        self.email = email
        self.firstname = firstname
        self.lastname = lastname

    @classmethod
    def print_var(cls, obj):
        print ("obj.email obj.firstname obj.lastname")
        print(obj.email, obj.firstname, obj.lastname)
        print("cls.email cls.firstname cls.lastname")
        print(cls.email, cls.firstname, cls.lastname)

u1 = User(email='abc@xyz', firstname='first', lastname='last')
User.print_var(u1)

在上面的代码中,User类有3个全局变量,每个变量的值都是'none‘。u1是通过实例化该类创建的对象。方法print_var打印User类的类变量和对象u1的对象变量的值。在下面显示的输出中,每个类变量User.emailUser.firstnameUser.lastname的值都是'none',而对象变量u1.emailu1.firstnameu1.lastname的值分别是'abc@xyz''first''last'

代码语言:javascript
复制
obj.email obj.firstname obj.lastname
('abc@xyz', 'first', 'last')
cls.email cls.firstname cls.lastname
('none', 'none', 'none')
票数 3
EN

Stack Overflow用户

发布于 2020-08-10 18:39:21

示例代码:

代码语言:javascript
复制
class inside:
    def __init__(self):
        self.l = []

    def insert(self, element):
        self.l.append(element)


class outside:
    l = []             # static variable - the same for all instances

    def insert(self, element):
        self.l.append(element)


def main():
    x = inside()
    x.insert(8)
    print(x.l)      # [8]
    y = inside()
    print(y.l)      # []
    # ----------------------------
    x = outside()
    x.insert(8)
    print(x.l)      # [8]
    y = outside()
    print(y.l)      # [8]           # here is the difference


if __name__ == '__main__':
    main()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1537202

复制
相关文章

相似问题

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