假设我想为car、tractor和boat创建一个类。所有这些类都有一个engine实例,我想在一个列表中跟踪所有引擎。如果我正确理解电机对象是否可变,我可以将其存储为car的属性以及列表中的相同实例。我无法找到任何关于用户定义的类是否可变的可靠信息,如果在定义它们时可以选择,任何人都可以解释一下吗? 最佳答案 用户类被认为是可变的。Python没有(绝对)私有(private)属性,因此您始终可以通过进入内部来更改类。要将您的类用作dict中的键或将它们存储在set中,您可以定义.__hash__()method和.__eq__(
假设我想为car、tractor和boat创建一个类。所有这些类都有一个engine实例,我想在一个列表中跟踪所有引擎。如果我正确理解电机对象是否可变,我可以将其存储为car的属性以及列表中的相同实例。我无法找到任何关于用户定义的类是否可变的可靠信息,如果在定义它们时可以选择,任何人都可以解释一下吗? 最佳答案 用户类被认为是可变的。Python没有(绝对)私有(private)属性,因此您始终可以通过进入内部来更改类。要将您的类用作dict中的键或将它们存储在set中,您可以定义.__hash__()method和.__eq__(
让Python字符串不可变的设计原因是什么?它如何让编程变得更容易?我习惯于可变字符串,比如C语言中的字符串。如果没有可变字符串,我应该如何编程?有什么最佳做法吗? 最佳答案 当您收到一个字符串时,您会确保它保持不变。假设您使用字符串参数构造如下Foo,然后修改字符串;那么Foo的名字会突然改变:classFoo(object):def__init__(self,name):self.name=namename="Hello"foo=Foo(name)name[0]="J"对于可变字符串,您必须一直进行复制以防止坏事发生。它还允许单
让Python字符串不可变的设计原因是什么?它如何让编程变得更容易?我习惯于可变字符串,比如C语言中的字符串。如果没有可变字符串,我应该如何编程?有什么最佳做法吗? 最佳答案 当您收到一个字符串时,您会确保它保持不变。假设您使用字符串参数构造如下Foo,然后修改字符串;那么Foo的名字会突然改变:classFoo(object):def__init__(self,name):self.name=namename="Hello"foo=Foo(name)name[0]="J"对于可变字符串,您必须一直进行复制以防止坏事发生。它还允许单
我不确定为什么字符串和元组是不可变的;使它们不可变的优点和缺点是什么? 最佳答案 想象一种名为FakeMutablePython的语言,您可以在其中使用列表赋值等方式更改字符串(例如mystr[0]='a')a="abc"这会在内存地址0x1中创建一个条目,其中包含“abc”,以及指向它的标识符a。现在,说你愿意..b=a这将创建标识符b并将其指向相同的内存地址0x1现在,如果字符串是可变的,并且您更改b:b[0]='z'这会将存储在0x1的字符串的第一个字节更改为z..由于标识符a指向此处,因此该字符串也会更改,因此..print
我不确定为什么字符串和元组是不可变的;使它们不可变的优点和缺点是什么? 最佳答案 想象一种名为FakeMutablePython的语言,您可以在其中使用列表赋值等方式更改字符串(例如mystr[0]='a')a="abc"这会在内存地址0x1中创建一个条目,其中包含“abc”,以及指向它的标识符a。现在,说你愿意..b=a这将创建标识符b并将其指向相同的内存地址0x1现在,如果字符串是可变的,并且您更改b:b[0]='z'这会将存储在0x1的字符串的第一个字节更改为z..由于标识符a指向此处,因此该字符串也会更改,因此..print
python有不可变的列表吗?假设我希望有一个有序的元素集合的功能,但我想保证不会改变,如何实现?列表是有序的,但它们可以改变。 最佳答案 是的。它被称为tuple。所以,[1,2]是一个list并且可以被变异,而不是(1,2)是一个tuple不能。更多信息:单元素的tuple不能通过写(1)来实例化,而是需要写(1,)。这是因为解释器对括号还有各种其他用途。您也可以完全取消括号:1,2与(1,2)相同请注意,元组完全不是不可变列表。单击此处阅读有关differencesbetweenlistsandtuples的更多信息
python有不可变的列表吗?假设我希望有一个有序的元素集合的功能,但我想保证不会改变,如何实现?列表是有序的,但它们可以改变。 最佳答案 是的。它被称为tuple。所以,[1,2]是一个list并且可以被变异,而不是(1,2)是一个tuple不能。更多信息:单元素的tuple不能通过写(1)来实例化,而是需要写(1,)。这是因为解释器对括号还有各种其他用途。您也可以完全取消括号:1,2与(1,2)相同请注意,元组完全不是不可变列表。单击此处阅读有关differencesbetweenlistsandtuples的更多信息
我有一个包含各种成员变量的类。有一个构造函数,有getter方法,但没有setter方法。事实上,这个对象应该是不可变的。publicclassExample{privateArrayListlist;}现在我注意到以下情况:当我使用getter方法获取变量列表时,我可以添加新值等等-我可以更改ArrayList。当我下次为此变量调用get()时,将返回更改后的ArrayList。怎么会这样?我没有再设置它,我只是在努力!使用String这种行为是不可能的。那么这里有什么区别呢? 最佳答案 仅仅因为对列表的引用是不可变的并不意味着它
我有一个包含各种成员变量的类。有一个构造函数,有getter方法,但没有setter方法。事实上,这个对象应该是不可变的。publicclassExample{privateArrayListlist;}现在我注意到以下情况:当我使用getter方法获取变量列表时,我可以添加新值等等-我可以更改ArrayList。当我下次为此变量调用get()时,将返回更改后的ArrayList。怎么会这样?我没有再设置它,我只是在努力!使用String这种行为是不可能的。那么这里有什么区别呢? 最佳答案 仅仅因为对列表的引用是不可变的并不意味着它