通过引用访问 Python 类的属性

问题描述 投票:0回答:0

这个链接,这是官方python文档的一部分,我找到了以下信息:

类对象支持两种操作:属性引用实例化

属性引用 使用用于 Python 中所有属性引用的标准语法。因此,如果

MyClass
是一个类的名称,而
func
MyClass
的一个属性的名称,那么:
MyClass.func
是一个有效的属性引用。

类实例化 使用函数符号。所以

x = MyClass()
创建一个类的新实例并将这个对象赋值给局部变量
x
.

出现在先前文档开头的表达式

Class object
表示类也是一个对象,而不仅仅是类的实例。

到目前为止,只有在一种情况下我使用了Attribute references 来访问类的方法而不是Class instantiation(要了解这种情况,请参阅this post)。 我一般总是创建一个类的实例并通过这个实例对象调用类的方法

通过这篇文章,我想知道,出于某些原因,有时是否会 better 使用属性引用而不对类进行任何实例化。

我的问题

  • 是否有一些原因可以避免创建类的实例并使用 Attribute references 来访问其属性?
  • 因为我在 嵌入式系统 中使用 Python,所以我有兴趣减少资源使用。如果我避免通过 references 创建类 istance 和访问类属性,我可以节省资源吗?或者程序使用的资源不依赖于这个选择?

在问题的其余部分,我将报告一些使用 Attribute references 的代码片段,我将重复我的问题,将它们链接到示例代码。

两种访问方式看起来相同的示例

在下面的代码中,两种方法给出了相同的结果:

class MyClass:
    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 <---")
    x = MyClass()
    x.set_attribute1_value("new_value")
    x.print_attribute1()

    print("+++")

    print("Use of ---> Attribute references <---")
    MyClass.set_attribute1_value(MyClass, "new_value")
    MyClass.print_attribute1(MyClass)

main()

main()
执行的输出是:

Use of Class instantiation
new_value
+++
Use of Attribute references
new_value

在示例中,使用属性引用避免了对象的实例化。它节省资源吗?

“方法容器”类

提示我属性引用可能适合的上下文是当类只是一个方法容器(这是我在这篇文章中发明的一个术语)如下:

class MyClass:
    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")

# use of Attribute references
def main_with_attribute_references():
    MyClass.method1(MyClass, "arg-value")
    MyClass.method2(MyClass)

# use of an istance of class MyClass
def main_with_instance():
    x = MyClass()
    x.method1("arg-value")
    x.method2()

我的生产应用程序包含一些此类(我认为这不是一个好的面向对象编程)。
在此示例代码中,是使用Attribute references 还是 MyClass 的实例更好?还是一样?

谢谢

python class embedded-linux software-design class-attributes
© www.soinside.com 2019 - 2024. All rights reserved.