0

我写了以下程序

#! /usr/bin/python

class Rectangle:
    def __init__(self):
        self.width=0;
        self.width=0;
    def setSize(self,size):
        self.width,self.height = size
    def getSize(self):
        return self.width,self.height

该程序被命名为 something.py
有 2 种方法来运行这个程序

1) $bash:~/$  python
   >>>import something

另一种方法是

2) python -i something.py

在第一种方法的情况下,当我做一个

>>>r=Rectangle() 

我收到错误

 r=Rectangle()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'Rectangle' is not defined

但是当我采用第二种方法
并执行 a时>>>r=Rectangle() ,我没有收到任何错误。

我检查了第一种方法

>>> dir(some)
['Rectangle', '__builtins__', '__doc__', '__file__', '__name__', '__package__']

所以定义了名称 Rectangle 那么为什么我会在这里收到错误消息?

更新

我写了另一个程序

#! /usr/bin/python

def checkIndex(key):
    if not isinstance(key, (int, long)): raise TypeError
    if key<0: raise IndexError

class ArithmeticSequence:
    def __init__(self, start=0, step=1):
        self.start = start      # Store the start value
        self.step = step        # Store the step value
        self.changed = {}       # No items have been modified
    def __getitem__(self, key):
        checkIndex(key)
        try: return self.changed[key]
        except KeyError:
            return self.start + key*self.step
    def __setitem__(self, key, value):
        checkIndex(key)
        self.changed[key] = value

如果您将此程序键入为 another.py 并执行 >>> import another
>>>s=ArithmeticSequence(1,2)

没有得到 ArithmeticSequence 未定义的错误.....

4

1 回答 1

1

导入模块时,其中定义的名称不会自动添加到全局命名空间。你需要做:

import something
r = something.Rectangle()

或者

from something import Rectangle
r = Rectangle()
于 2013-06-05T21:18:49.197 回答