【问题标题】:Python AttributeError: class has no attributePython AttributeError:类没有属性
【发布时间】:2018-04-04 07:59:33
【问题描述】:

我有一个包含simpy ResourceContainer (buffer) 的类队列的代码:

class queue:
    def __init__(self, env):
        self.port = simpy.Resource(env, capacity=1)
        self.buffer = simpy.Container(env, init = 0, capacity=1250000000)
        self.mon_proc = env.process(self.monitor_tank(env))

但是当我想使用这个类并且它的属性缓冲区使用

def Packet(env, id, size, port, time_in_port):

    arrive = env.now
    yield queue.buffer.put(size)
    print('packet%s %s arriving at %lf' % (id, size, arrive))

    with port.request() as req:
        yield req

        tip = random.expovariate(1/time_in_port)
        yield env.timeout(tip)
        amount = size
        yield queue.buffer.get(amount)
        print('packet%s %s depart at %lf' % (id, size, env.now))

调用 queue.buffer 时出现以下错误

AttributeError: class queue has no attribute 'buffer'

介意解释为什么我不能使用类中的属性吗? 谢谢。

【问题讨论】:

  • bufferBuffer 不同。
  • @khelwood 抱歉,我修正了那个错字。仍然面临同样的问题
  • 你真的在某处实例化你的队列类吗?看起来你只是想直接使用这个类
  • queue 是一个类。 queue() 是该类的一个实例。 bufferinstance 的属性。

标签: python class attributeerror simpy


【解决方案1】:

如果queue 是您的类,并且它的实例属性为buffer,那么您可以通过您的类的instances 访问buffer,而不是类本身。

例如

class Queue:
    def __init__(self, env):
        self.port = simpy.Resource(env, capacity=1)
        self.buffer = simpy.Container(env, init = 0, capacity=1250000000)
        self.mon_proc = env.process(self.monitor_tank(env))

def Packet(env, id, size, port, time_in_port):
    queue = Queue(env) # instantiate your class
    ...
    # Make use of queue.buffer

【讨论】:

  • 谢谢伙计!修复它。
猜你喜欢
  • 1970-01-01
  • 2021-08-20
  • 1970-01-01
  • 2017-05-30
  • 2021-11-22
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多