首页 > 试题广场 >

根据以下程序,下列选项中,说法正确的是() class Ve

[单选题]

根据以下程序,下列选项中,说法正确的是()

class Vector:

    __slots__='x','y'

    def __init__(self):

        pass
class Vector3d(Vector):

    __slots__='x','z'

    def __init__(self):

        pass

vector = Vector()

vector3d = Vector3d()

  • 若子类没有定义__slots__属性,则子类可以继承父类的__slots__属性

  • Vector类的实例对象vector会自动获得实例属性x和y

  • Vector3d类的实例对象vector3d最多只能允许属性x和z

  • Vector3d类的实例对象vector3d最多只能允许属性x、y和z
1. python中凡是 "__" 开头的变量,都是私有变量,私有变量继承需要定义同名变量,因此A错误
2. __slots__是python类中的特殊变量,用于限制实例对象的属性,如__slots__='x','y',那么实例对象的属性就只能从这些里面找,因此它起的是限制效果而非自动获得,因此B错误。
3. 定义同名变量后子类继承父类的__slots__,从而支持xyz,因此C错
4. 选D
发表于 2022-02-08 00:37:58 回复(5)
python中子类不会继承父类的私有属性
发表于 2022-01-21 11:38:57 回复(2)
A. 若子类没有定义__slots__属性,则子类可以继承父类的__slots__属性
	
# 当子类未声明__slots__时,不继承父类的__slots__属性
B.Vector类的实例对象vector会自动获得实例属性x和y
	
# 在定义了__slots__变量后,类实例不能自动获得实例属性,同时也不能随意创建不在定义内的属性,同时也不再有__dict__结构
C.Vector3d类的实例对象vector3d最多只能允许属性x和z
	
# 当子类声明__slots__时,继承父类的__slots__
D. Vector3d类的实例对象vector3d最多只能允许属性x、y和z

参考:https://www.jianshu.com/p/9e17a03d08b1
编辑于 2022-03-01 18:08:53 回复(0)
1. python中凡是 "__" 开头的变量,都是私有变量,私有变量继承需要定义同名变量,因此A错误
2. __slots__是python类中的特殊变量,用于限制实例对象的属性,如__slots__='x','y',那么实例对象的属性就只能从这些里面找,因此它起的是限制效果而非自动获得,因此B错误。
3. 定义同名变量后子类继承父类的__slots__,从而支持xyz,因此C错
4. 选D
发表于 2022-03-30 17:04:35 回复(0)
1. python中凡是 "__" 开头的变量,都是私有变量,私有变量继承需要定义同名变量,因此A错误
2. __slots__是python类中的特殊变量,用于限制实例对象的属性,如__slots__='x','y',那么实例对象的属性就只能从这些里面找,因此它起的是限制效果而非自动获得,因此B错误。
3. 定义同名变量后子类继承父类的__slots__,从而支持xyz,因此C错
4. 选D
发表于 2023-10-31 19:01:20 回复(0)
记录
发表于 2022-11-22 21:02:31 回复(0)
父类定义了__slots__,子类没定义__slots__,通过子类也能获取到__slots__,但是__slots__对子类没有限制作用,可以说子类没有继承父类的__slots__属性
发表于 2022-09-21 13:47:16 回复(0)
__slot__限制的是自己的基因(属性),限制不了父亲的基因!
发表于 2022-08-01 20:48:25 回复(0)
如果子类没有定义__slots__属性,则不会继承父类的__slots__属性. 这句话我表示怀疑并调试截图如下, 子类Vector3d没有定义__slots__属性, 但它继承了父类的__slots__属性.所以答案B也是对的. 如果有不同看法, 欢迎指出

编辑于 2022-06-21 17:29:04 回复(1)