Python中type(self)仅返回对象类型吗,能否对其属性进行赋值?
Python中type(self)的赋值与属性修改合法性说明
核心结论
type(self)不能被直接赋值type(self)是内置函数type()的调用返回值,属于函数调用表达式,Python语法不允许对函数调用结果直接赋值,若尝试写type(self) = 自定义值会直接抛出SyntaxError: cannot assign to function call语法错误。- 修改
type(self)的属性完全合法,属于Python常规操作type(self)返回的是当前实例所属的类对象,Python中的类本身就是一等对象,只要对应属性没有被设置为不可修改,就可以正常对其属性进行增删改操作。
结合示例补充说明
你给出的代码中type(self).__counter += 1的写法,比直接写死Robot.__counter += 1更具扩展性:如果后续有子类继承Robot类,子类实例化时会自动累加子类自身的类计数器,而不会修改父类的计数器,适配继承场景的需求。
可通过以下代码验证该特性:
class Robot: __counter = 0 def __init__(self): type(self).__counter += 1 @classmethod def RobotInstances(cls): return cls.__counter # 定义子类继承Robot class ServiceRobot(Robot): __counter = 0 # 测试计数逻辑 r1 = Robot() r2 = Robot() s1 = ServiceRobot() print(Robot.RobotInstances()) # 输出2 print(ServiceRobot.RobotInstances()) # 输出1
唯一需要注意的是__开头的类属性会触发Python的名称修饰(Name Mangling)机制,只有在类内部才能通过__counter的原名访问,类外访问需要使用_类名__counter的格式,你的示例操作在类内部执行,完全符合规范。
内容的提问来源于stack exchange,提问作者Dror
相关产品推荐
相关产品推荐

