调试Python Cod的新手

2024-04-23 23:39:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我想要一个类的局部变量被另一个类改变。我的脚本类似于:

import datetime
b = []


class P:
    def __init__(self):
        self.count = 1
        self.create()

    def create(self):
        global b
        a = C(self.count)
        for i in range(10):
            a.print_name()
        print b


class C:
    def __init__(self, *data):
        self.test = data[0]

    @staticmethod
    def print_name():
        global b
        b.append(datetime.datetime.now())
o = P()

如何避免使用全局变量。在网上我发现使用“超级”可以解决这个问题。请在这方面给予帮助


Tags: nameimportself脚本fordatadatetimeinit
2条回答

使C构造函数接受P实例。并调用P方法将项附加到P对象的实例属性

class P:
    def __init__(self):
        self.count = 1
        self.items = []
        self.create()

    def append(self, item):
        self.items.append(item)

    def create(self):
        a = C(self, self.count)  # <  Pass P instance (self)
        for i in range(10):
            a.print_name()
        print self.items


class C:
    def __init__(self, p_instance, *data):
        self.p_instance = p_instance  # <  Save P instance to use later
        self.test = data[0]

    def print_name(self):
        self.p_instance.append(datetime.datetime.now())  # <  Call p instance method

您可能正在查找类属性。如果将b作为属性添加到C类中,则可以将其作为C.bC().b进行访问,即从对该类或任何实例的引用进行访问

class C(object):  # classes in py2 should inherit from object!
  b = []  # b inside C definition

  @classmethod
  def print_name(cls):
      cls.b.append(datetime.datetime.now())

class P(object):
  def __init__(self):
    self.count = 1
    self.create()

  def create(self):
    a = C(self.count)
    for i in range(10):
        a.print_name()
    print C.b  # or a.b

当然,您也可以在P上放置b。在这种情况下,请

  def print_name():
      P.b.append(datetime.datetime.now())

相关问题 更多 >