通过从 this link 获得的信息,这是官方 python 文档的一部分,我了解到:
类对象支持两种操作:属性引用和实例化。
到目前为止,只有在一种情况下我使用了Attribute references 来访问类的方法而不是Class instantiation(要了解这种情况,请参阅this post)。 我通常总是创建一个类的实例并通过这个实例调用类的方法。
通过这篇文章,我想知道,出于某些原因,有时是否会 better 使用属性引用而不进行任何实例化。
在下面的代码中,两种方法给出了相同的结果:
class A:
attribute1 = 'initial_value'
def set_attribute1_value(self, value):
self.attribute1 = value
def print_attribute1(self):
print(self.attribute1)
def main():
print("Use of ---> Class instantiation <---")
a = A()
a.set_attribute1_value("new_value")
a.print_attribute1()
print("+++")
print("Use of ---> Attribute references <---")
A.set_attribute1_value(A, "new_value")
A.print_attribute1(A)
main()
main()
执行的输出是:
Use of Class instantiation
new_value
+++
Use of Attribute references
new_value
在示例中,使用属性引用避免了对象的实例化。
另一种情况表明我可以使用 属性引用 是当类只是一个方法容器(这是我在这篇文章中发明的一个术语)如下:
class B:
def method1(self, arg):
print(f"method1 executed arg={arg}")
def method2(self):
print("method2 executed")
self.__methodN(self)
# private method
def __methodN(self):
print("methodN executed")
def main():
B.method1(B, "arg-value")
B.method2(B)
main()
在我的应用程序中有一些这样的类,我认为这不是一个好的面向对象编程!