如何解决直接在代码中创建类实例的目的是什么
Pyhon允许像创建新变量一样创建任何类实例属性,而您无需在类定义中定义它们。 这样做的目的是什么?
class MyClass:
def __init__(self):
pass
obj = MyClass()
obj.a = '1';
print(obj.a)
#>> 1
P.S。 找到了此类用法的有趣示例 Can you use a string to instantiate a class 动态创建的属性用于存储动态实例化的类
解决方法
这样做的目的是简单:在方法内部或外部访问实例没有区别。在方法内部和外部看到的对象是完全等效的,并且通过扩展,相同的规则适用于任何地方:
class MyClass:
def __init__(self):
print(self) # <__main__.MyClass object at 0x119636490>
self.b = 12 # assign to an instance
obj = MyClass()
print(obj) # <__main__.MyClass object at 0x119636490>
obj.b = 12 # # assign to an instance
请注意,可以在方法内部和外部读取和写入属性,并且这些属性在方法内部和外部均可见。实际上,除了double-underscore name mangling之类的一些代码重写之外,Python没有方法的“内部”和“外部”概念。
这既是结果,也是启用功能,允许其他语言的各种内置功能在没有明确支持的情况下工作。例如,Python允许extension methods的等效项,而没有额外的语法/功能:
class MyPoint:
def __init__(self,x,y):
self.x,self.y = x,y
# Oops,forgot a repr!
def my_point_repr(self):
return f'{self.__class__.__name__}(x={self.x},y={self.y})'
MyPoint.__repr__ = my_point_repr
print(MyPoint(1,2)) # MyPoint(x=1,y=2)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。