Tên đã nhập được gắn với phạm vi hiện tại, do đó, việc nhập bên trong một hàm chỉ gắn với tên cục bộ.
Nếu bạn hoàn toàn có để nhập khẩu một cái gì đó trong __init__
mà sau đó cần phải được sẵn trên toàn cầu, đánh dấu tên nhập khẩu như global
đầu tiên:
>>> def foo():
... global sys
... import sys
...
>>> sys
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'sys' is not defined
>>> foo()
>>> sys
<module 'sys' (built-in)>
nhưng điều này thường dẫn đến lỗi kỳ lạ và tuyệt vời khó có thể xác định vị trí . Đừng làm điều đó, chỉ cần thực hiện nhập khẩu của bạn ở phạm vi mô-đun thay thế.
Nếu bạn cần tên nhập khẩu trong phương thức lớp khác, bạn cũng có thể gán tên nhập khẩu cho một biến Ví dụ:
class Foo(object):
def __init__(self):
import os
self.join = os.path.join
nhưng một lần nữa, đó không phải là cách tốt nhất để sử dụng.
Nguồn
2012-11-15 10:09:11
Quá trình nhập bị ràng buộc vào phạm vi được nhập vào ... Tôi cảm thấy bạn không muốn làm điều này, trường hợp sử dụng của bạn là gì? –
Tại sao bạn chỉ muốn nhập nó trong '__init __()' nếu bạn cần nó trong các phạm vi khác? –
bởi vì tôi có một lớp với sự phụ thuộc, và tôi muốn phụ thuộc đó chỉ được nạp nếu ai đó đang sử dụng lớp đó (tạo ra một cá thể) – tapioco123