Python如何在类方法之间共享变量,实例属性和类属性之间有什么区别

问题描述

例如:

class MyClass:

    def __init__(self,Attr1):
        self.Attr1 = Attr1

    def method1(self):
        self.var1 = [some codes involves Attr1]

    def method2(self):
        self.var2 = [some codes involves var1 from method1]

可行吗?但是函数中的变量是函数的局部变量。我不知道是否可以从var1致电method1

我能想到的另一种方法是在self.var1中设置__init__,这是一个类属性,因此我可以在method2中对其进行调用。但是然后我不想有一个很大的__init__

我还阅读了有关类属性和实例属性的东西-两者之间有什么区别?

解决方法

实例属性

该类中以self.开头的变量属于特定的单个类实例(而不是特定的方法),因此非常可行。

您可以在类构造函数中对其进行初始化:

class A:
    def __init__(self):
        self.instance_attribute = 'instance attribute'

您可以分别更改每个实例的值:

a1 = A()
a2 = A()

a2.instance_attribute = 'sabich'

# 'instance attribute' (unchanged)
print(a1.instance_attribute)

# 'sabich'
print(a2.instance_attribute)

类属性

class A:
    a = "class attribute"

类属性是所有类实例共有的,并由该类拥有。

可以通过类名称访问它们:

# 'class attribute'
print(A.a)

或通过特定实例:

a1 = A()

# 'class attribute'
print(a1.a)
,

您已经在使用self.,所以var1的范围是类而不是方法。

因此,如果将var1称为self.var1并且首先调用method1,则可以在任何其他类方法中使用var1。

,

这可行吗?

是的。

But the variables in functions are local to the function.

不是,它们是实例属性,也就是说,它们是类的某些实例的属性。

我不知道我是否可以从var1呼叫method1

可以,但是您需要创建一个实例,然后为该实例调用方法。

我能想到的另一种方法是在其中设置self.var1 __init__是一个类属性,因此我可以将其调用 method2

最好在构造函数中进行设置,因为这样就不必担心method1是否被调用。但是您可以毫无问题地在method2中使用它。

但是我不想有一个很大的__init__

您可以创建辅助方法并调用它们。

I also read something about a class attributes and an instance attributes — what's the difference between the two?

类属性是类的属性,即它们是整个实例集的属性。实例属性是属性的实例。考虑一下stackoverflow.com用户。每个用户都有一个用户名,即实例级别。但是,用户数是整个用户的属性。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...