为什么有些Python对象字段是元组而不是源变量的类型

为什么有些Python对象字段是元组而不是源变量的类型,python,Python,在实例化类时,为什么有两个类字段将其类型更改为元组 source_a = "ENVIRONMENT" scopes = ["domain_read_only", "user_read_only"] subject = "blah@blah.com" class DataChunk: def __init__(self, source, impersonate, permissions):

在实例化类时,为什么有两个类字段将其类型更改为元组

source_a = "ENVIRONMENT"
scopes = ["domain_read_only", "user_read_only"]
subject = "blah@blah.com"


class DataChunk:
    def __init__(self, source, impersonate, permissions):
        self.subject = impersonate,
        self.scopes = permissions,
        self.source = source


my_data_chunk = DataChunk(source=source_a, impersonate=subject, permissions=scopes)

print(f"my_data_chuck.subject: {type(my_data_chunk.subject)}")
print(f"my_data_chunk.scopes: {type(my_data_chunk.scopes)}")
print(f"my_data_chunk.source: {type(my_data_chunk.source)}")
print(f"subject: {my_data_chunk.subject}")
print(f"scopes: {my_data_chunk.scopes}")
print(f"source: {my_data_chunk.source}")
产生:

my_data_chuck.subject: <class 'tuple'>
my_data_chunk.scopes: <class 'tuple'>
my_data_chunk.source: <class 'str'>
subject: ('blah@blah.com',)
scopes: (['domain_read_only', 'user_read_only'],)
source: ENVIRONMENT
为什么主语和作用域是元组? 为什么不是来源


我已经在两个不同的系统上尝试了Python 3.6和3.8。

由于类初始化中的逗号,请使用下面的类定义并查看输出-

class DataChunk:
    def __init__(self, source, impersonate, permissions):
        self.subject = impersonate
        self.scopes = permissions
        self.source = source
输出

my_data_chuck.subject: <class 'str'>
my_data_chunk.scopes: <class 'list'>
my_data_chunk.source: <class 'str'>
subject: blah@blah.com
scopes: ['domain_read_only', 'user_read_only']
source: ENVIRONMENT

这是因为您在模拟中添加了逗号和权限

逗号将对象转换为元组

相反,请执行以下操作:

class DataChunk:
    def __init__(self, source, impersonate, permissions):
        self.subject = impersonate
        self.scopes = permissions
        self.source = source


因为后面的逗号。Python会将其解释为主题的快捷方式,并将其转换为tuple@LukasThaler:挑剔:这不是捷径;除了空元组之外,Python中的元组主要由逗号定义,而不是括号;括号只是为了优先和消除歧义。今天学到了一些新东西:-+1从梅格斯那里,我打算快速地将其他概念混合在一起。