如何在其他方法中访问类属性变量[重复]

Posted

技术标签:

【中文标题】如何在其他方法中访问类属性变量[重复]【英文标题】:How to access a classes attribute variable in other method [duplicate] 【发布时间】:2020-09-18 01:44:52 【问题描述】:

我正在学习python3,我想知道我该怎么做

class testit:
    def assigna():
        a = "Hi"

    def geta(self):
        print(self.a)


test = testit
print(test.geta())

如何按照 cmets 中的建议访问 geta 的内部,我尝试使用 self.a,但它给了我一个错误。

这是我的更新代码

class testit:
    def assigna(self):
        self.a = "Hi"

    def geta(self):
        print(self.a)


test = testit
print(test.geta())

这是错误。

Traceback (most recent call last):
  File "test.py", line 44, in <module>
    print(test.geta())
TypeError: geta() missing 1 required positional argument: 'self'

【问题讨论】:

您的意思是:self.a = "Hi" 您还需要创建testit 类的实例调用 其方法test.assigna(),并添加一个参数(通过约定称为self) 到assigna 当我尝试这样做时,它给了我一个错误 TypeError: geta() missing 1 required positional argument: 'self' now here is how my code looking loke 请使用完整的错误回溯更新您的问题。 @ForThis 阅读Tutorial - 9.3.5. Class and Instance Variables 【参考方案1】:

当您在方法的参数中传递self 时,它引用一个对象,因此您必须在之前将a 分配为对象属性。

您还必须创建此类的实例,并像这样调用它classname()

class TestIt:
    def assigna(self):
        self.a = "Hi"

    def geta(self):
        return self.a


test = TestIt()
test.assigna()
test.geta()
print(test.geta())

【讨论】:

【参考方案2】:

您可以通过self 访问基于实例的变量,但您必须在构造函数中对其进行赋值,这里有一些代码供您参考:

class Test:
  def __init__(self):
      self.a = ""
  def assign_a(self):
      self.a = "Hi"
  def get_a(self):
     print(self.a)

所以你可以像这样访问它:

test = Test()
test.assign_a()
test.get_a()

这里仔细看看__init__函数,它被称为构造函数,在里面我们声明变量aself。现在这个变量将可以在整个类中访问。

享受学习!!

【讨论】:

以上是关于如何在其他方法中访问类属性变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

java里一个私有的属性如何在其他类里面进行访问?

如何访问派生类中的私有集属性[重复]

如何访问其他类中的属性/方法

通过其他类构造函数在主方法中创建对象时访问对象属性

面向对象中对象和类以及如何访问类中属性和方法

S1/C#语言和数据库技术基础/03-使用属性升级MyBank