为什么设置Python2.7会跨越类边界

2024-04-28 17:19:03 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的代码中,为什么在类test1中将email\u attachments列表设置为'attach1'也会在类test2中将email\u attachments列表设置为'attach1'?你知道吗

班级:

class classtest:
    smtp_server = ""
    smtp_port = 0
    email_attachments = []

    def class_print(self):

        print self.smtp_server
        print self.smtp_port
        print self.email_attachments

脚本:

import ClassTest

def main():
    test1 = ClassTest.classtest()
    test1.smtp_server = "server1"
    test1.smtp_port = "1"
    test1.email_attachments.append("attach1")
    test1.class_print()

    print

    test2 = ClassTest.classtest()
    test2.smtp_server = "server2"
    test2.class_print()

main()

结果:

服务器1

1个

['附件1']

服务器2

0个

['附件1']


Tags: self列表serverportemailsmtp中将attachments
1条回答
网友
1楼 · 发布于 2024-04-28 17:19:03

在类顶部定义的3个变量与类本身相关联,而不是与类的特定实例相关联,因此它们的值在test1和test2之间共享。你知道吗

如果您的意图是为classtest类型的每个对象都有单独的值,那么您应该定义一个构造函数,并对每个变量使用“self”前缀:

def __init__(self):
    self.smtp_server = ""
    self.smtp_port = 0
    self.email_attachments = []

相关问题 更多 >