Python nhập tất cả các lớp từ tệp

Nó hoạt động tốt đối với lớp được định nghĩa trong

__all__ = ['MyClass01','MyClass02']
2. Nhưng với giải pháp này nếu có nhiều lớp được xác định trong các tệp khác nhau trong
__all__ = ['MyClass01','MyClass02']
5 và tôi muốn nhập tất cả chúng, tôi phải nhập một dòng cho mỗi tệp. Phải có một phím tắt cho việc này. tôi đã thử

from subdir.* import *

Nhưng nó đã không thành công

CHỈNH SỬA. đây là nội dung của các tập tin

Đây là

__all__ = ['MyClass01','MyClass02']
6 [sử dụng
__all__ = ['MyClass01','MyClass02']
7 như Apalala đề xuất]

__all__ = ['MyClass01','MyClass02']

Đây là

__all__ = ['MyClass01','MyClass02']
2

class MyClass01:
    def printsomething[]:
        print 'hey'

Đây là

__all__ = ['MyClass01','MyClass02']
3

class MyClass02:
    def printsomething[]:
        print 'sup'

Đây là

class MyClass01:
    def printsomething[]:
        print 'hey'
0

__all__ = ['MyClass01','MyClass02']
1

Đây là truy nguyên mà tôi nhận được khi tôi cố chạy

class MyClass01:
    def printsomething[]:
        print 'hey'
0

__all__ = ['MyClass01','MyClass02']
3

Giải pháp tốt nhất

Mặc dù tên được sử dụng ở đó khác với tên được hiển thị trong cấu trúc thư mục câu hỏi của bạn, nhưng bạn có thể sử dụng câu trả lời của tôi cho câu hỏi có tiêu đề Không gian tên và các lớp.

__all__ = ['MyClass01','MyClass02']
6 được hiển thị ở đó cũng sẽ cho phép tập lệnh
class MyClass01:
    def printsomething[]:
        print 'hey'
3 được viết theo cách này [
class MyClass01:
    def printsomething[]:
        print 'hey'
4 ánh xạ tới
__all__ = ['MyClass01','MyClass02']
5 trong câu hỏi của bạn và
class MyClass01:
    def printsomething[]:
        print 'hey'
6 tới
class MyClass01:
    def printsomething[]:
        print 'hey'
7, v.v.]

from subdir.* import *
0

Sửa đổi [cập nhật]

Rất tiếc, mã trong câu trả lời khác của tôi không hoàn toàn làm những gì bạn muốn — nó chỉ tự động nhập tên của bất kỳ mô hình con gói nào. Để làm cho nó cũng nhập các thuộc tính được đặt tên từ mỗi mô hình con cần thêm một vài dòng mã. Đây là phiên bản sửa đổi của tệp

__all__ = ['MyClass01','MyClass02']
6 của gói [cũng hoạt động trong Python 3. 4. 1]

from subdir.* import *
2

Ngoài ra, bạn có thể đặt ở trên vào một riêng biệt. py của riêng nó trong thư mục gói—chẳng hạn như

class MyClass01:
    def printsomething[]:
        print 'hey'
9—và sử dụng nó từ
__all__ = ['MyClass01','MyClass02']
6 của gói như thế này

from subdir.* import *
50

Dù bạn đặt tên cho tệp là gì, nó phải là thứ bắt đầu bằng ký tự gạch dưới

class MyClass02:
    def printsomething[]:
        print 'sup'
1 để nó không cố gắng đệ quy chính
class MyClass02:
    def printsomething[]:
        print 'sup'
2

Giải pháp liên quan

Python – Nhập mô-đun từ thư mục mẹ

Bạn có thể sử dụng nhập tương đối [python >= 2. 5]

from subdir.* import *
51

[Có gì mới trong Python 2. 5] PEP 328. Nhập khẩu tuyệt đối và tương đối

CHỈNH SỬA. đã thêm một dấu chấm khác '. ' để tăng hai gói

Python – Cách nhập các tệp Python khác

Có nhiều cách để nhập tệp python, tất cả đều có ưu và nhược điểm của chúng

Đừng vội vàng chọn chiến lược nhập đầu tiên phù hợp với bạn, nếu không bạn sẽ phải viết lại cơ sở mã sau này khi bạn thấy nó không đáp ứng nhu cầu của mình

Tôi sẽ bắt đầu giải thích ví dụ #1 đơn giản nhất, sau đó tôi sẽ chuyển sang ví dụ #7 chuyên nghiệp và mạnh mẽ nhất

Ví dụ 1, Nhập mô-đun python bằng trình thông dịch python

  1. Đặt cái này vào /home/el/foo/fox. py

    from subdir.* import *
    
    52
  2. Vào trình thông dịch python

    from subdir.* import *
    
    53

    Bạn đã nhập fox thông qua trình thông dịch python, gọi hàm python

    class MyClass02:
        def printsomething[]:
            print 'sup'
    
    3 từ bên trong fox. py

Ví dụ 2, Sử dụng

class MyClass02:
    def printsomething[]:
        print 'sup'
4 hoặc [
class MyClass02:
    def printsomething[]:
        print 'sup'
5 trong Python 3] trong tập lệnh để thực thi tệp python khác tại chỗ

  1. Đặt cái này vào /home/el/foo2/mylib. py

    from subdir.* import *
    
    54
  2. Đặt cái này vào /home/el/foo2/main. py

    from subdir.* import *
    
    55
  3. chạy tập tin

    from subdir.* import *
    
    56

    Chức năng moobar được nhập từ mylib. py và có sẵn trong main. py

Ví dụ 3, Sử dụng từ. nhập khẩu. chức năng

  1. Đặt cái này vào /home/el/foo3/chekov. py

    from subdir.* import *
    
    57
  2. Đặt cái này vào /home/el/foo3/main. py

    from subdir.* import *
    
    58
  3. Chạy nó như thế này

    from subdir.* import *
    
    59

    Nếu bạn đã định nghĩa các chức năng khác trong chekov. py, chúng sẽ không khả dụng trừ khi bạn

    class MyClass02:
        def printsomething[]:
            print 'sup'
    
    6

Ví dụ 4, Nhập riaa. py nếu nó ở một vị trí tệp khác với nơi nó được nhập

  1. Đặt cái này vào /home/el/foo4/stuff/riaa. py

    from subdir.* import *
    
    0
  2. Đặt cái này vào /home/el/foo4/main. py

    from subdir.* import *
    
    1
  3. chạy nó

    from subdir.* import *
    
    2

    Điều đó nhập mọi thứ trong tệp nước ngoài từ một thư mục khác

Ví dụ 5, sử dụng

class MyClass02:
    def printsomething[]:
        print 'sup'
7

from subdir.* import *
3

Ví dụ 6, nhập tệp của bạn qua cõng python startuphook

Cập nhật. Ví dụ này đã từng hoạt động với cả python2 và 3, nhưng hiện tại chỉ hoạt động với python2. python3 đã loại bỏ bộ tính năng startuphook của người dùng này vì nó đã bị lạm dụng bởi những người viết thư viện python có kỹ năng thấp, sử dụng nó để đưa mã của họ vào không gian tên chung một cách bất lịch sự, trước tất cả các chương trình do người dùng xác định. Nếu bạn muốn điều này hoạt động với python3, bạn sẽ phải sáng tạo hơn. Nếu tôi cho bạn biết cách thực hiện, các nhà phát triển python cũng sẽ vô hiệu hóa bộ tính năng đó, vì vậy bạn sẽ tự làm

Nhìn thấy. https. // tài liệu. con trăn. org/2/thư viện/người dùng. html

Đặt mã này vào thư mục nhà của bạn trong

class MyClass02:
    def printsomething[]:
        print 'sup'
8

from subdir.* import *
4

Đặt mã này vào chính của bạn. py [có thể ở bất cứ đâu]

from subdir.* import *
5

Chạy nó, bạn sẽ nhận được cái này

from subdir.* import *
6

Nếu bạn gặp lỗi ở đây.

class MyClass02:
    def printsomething[]:
        print 'sup'
9 thì có nghĩa là bạn đang sử dụng python3, startuphook bị tắt ở đó theo mặc định

Tín dụng cho jist này đi đến. https. //github. com/doc what/homedir-examples/blob/master/python-command line/. pythonrc. py Gửi dọc theo thuyền của bạn

Ví dụ 7, Mạnh mẽ nhất. Nhập tệp trong python bằng lệnh nhập trần

  1. Tạo một thư mục mới
    __all__ = ['MyClass01','MyClass02']
    
    10
  2. Tạo một thư mục mới
    __all__ = ['MyClass01','MyClass02']
    
    11
  3. Tạo một tệp trống có tên

    __all__ = ['MyClass01','MyClass02']
    
    6 dưới herp

    from subdir.* import *
    
    7
  4. Tạo một thư mục mới /home/el/foo5/herp/derp

  5. Dưới derp, tạo một tệp

    __all__ = ['MyClass01','MyClass02']
    
    6 khác

    from subdir.* import *
    
    8
  6. Trong /home/el/foo5/herp/derp tạo một tệp mới có tên là

    __all__ = ['MyClass01','MyClass02']
    
    14 Đặt tệp này vào đó

    from subdir.* import *
    
    9
  7. Khoảnh khắc của sự thật, Tạo tệp mới

    __all__ = ['MyClass01','MyClass02']
    
    15, đặt cái này vào đó;

    __all__ = ['MyClass01','MyClass02']
    
    0
  8. chạy nó

    __all__ = ['MyClass01','MyClass02']
    
    1

    Tệp

    __all__ = ['MyClass01','MyClass02']
    
    6 trống giao tiếp với trình thông dịch python mà nhà phát triển dự định thư mục này là một gói có thể nhập

Nếu bạn muốn xem bài đăng của tôi về cách bao gồm TẤT CẢ. py trong một thư mục xem tại đây. https. // stackoverflow. com/a/20753073/445131

Bạn có thể nhập các lớp từ một tệp Python khác không?

Câu lệnh nhập cho phép chúng tôi nhập mã từ các tệp hoặc mô-đun khác vào tệp hiện tại . Có thể coi nó như một liên kết cho phép chúng ta truy cập các thuộc tính hoặc phương thức của lớp từ các tệp khác và sử dụng chúng.

Làm cách nào để nhập lớp từ một tệp Python khác trong cùng thư mục?

Tạo một tệp trống có tên __init__. py trong cùng thư mục với các tệp . Điều đó sẽ biểu thị cho Python rằng "có thể nhập từ thư mục này". Điều tương tự cũng đúng nếu các tệp nằm trong thư mục con - đặt __init__. py trong thư mục con, sau đó sử dụng các câu lệnh nhập thông thường, với ký hiệu dấu chấm.

Làm cách nào để nhập tất cả các mô-đun từ gói bằng Python?

Nhập mô-đun bằng Python . Để nhập ví dụ về mô-đun đã xác định trước đó của chúng tôi, chúng tôi nhập thông tin sau vào dấu nhắc Python. Điều này không nhập trực tiếp tên của các chức năng được xác định trong ví dụ trong bảng ký hiệu hiện tại. Nó chỉ nhập ví dụ về tên mô-đun ở đó

__ tất cả __ trong Python là gì?

Trăn __all__ . allows users to import only some variables rather than the entire set of variables in a Python program.

Chủ Đề