2009-03-30 20 views
58

Cho một lớp C bằng Python, làm sao tôi có thể xác định được lớp nào đã được định nghĩa? Tôi cần một cái gì đó có thể làm việc từ một trong hai lớp C, hoặc từ một ví dụ tắt C.Làm cách nào để lấy filepath cho một lớp bằng Python?

Lý do tôi làm điều này là vì tôi thường là người hâm mộ đặt các tệp thuộc về cùng một thư mục. Tôi muốn tạo một lớp có sử dụng một mẫu Django để hiển thị chính nó dưới dạng HTML. Việc triển khai cơ sở nên suy ra tên tệp cho mẫu dựa trên tên tệp mà lớp được xác định.

Giả sử tôi đặt một lớp LocationArtifact vào tệp "base/artifacts.py", thì tôi muốn hành vi mặc định là rằng tên mẫu là "base/LocationArtifact.html".

+0

trùng lặp: http://stackoverflow.com/questions/269795/how-do-i -find-the-location-of-python-mô-đun-nguồn, http://stackoverflow.com/questions/602846/how-can-i-access-the-current-executing-module-or-class-name-in -python –

+0

Giả sử bạn biết mô-đun bạn đang tìm kiếm ile cho, tôi sẽ chỉ có chuỗi mô-đun khi tôi làm việc với việc triển khai một lớp. – Staale

Trả lời

82

Bạn có thể sử dụng các mô-đun inspect, như thế này:

import inspect 
inspect.getfile(C.__class__) 
+3

Tôi nghĩ rằng điều này sẽ làm việc cho Class, nhưng không phải cho một ví dụ. inspect.getfile (c .__ class__) nên hoạt động, trong đó c là một cá thể của C. –

+0

Bạn nói đúng; Tôi đã từng sử dụng nó trên lớp, và chỉ giả định nó sẽ làm việc cho các trường hợp. Cảm ơn! – DNS

+0

Không chắc chắn những gì tôi đã làm khác nhau nhưng thay vì 'getfile' tôi đã phải sử dụng:' inspect.getmodule (C .__ class __) ' – AJP

24

thử:

import sys, os 
os.path.abspath(sys.modules[LocationArtifact.__module__].__file__) 
5

Đây là cách tiếp cận sai cho Django và thực sự buộc mọi thứ.

Các mô hình ứng dụng Django điển hình là:

  • /dự án
    • /appname
      • models.py
      • views.py
      • /templates
        • index.html
        • , vv
+0

+1: Làm những gì Django tự nhiên và cuộc sống đơn giản hơn nhiều. –

+0

Đồng ý. Django là một trong những khuôn khổ với số tiền ít nhất là "ma thuật", nhưng các mẫu, thẻ mẫu và ứng dụng có một số kỳ vọng như là một phần của mô hình của chúng. Nếu bạn đang phải làm suy luận lớp học wacky có lẽ bạn đang đi sai hướng. – Soviut

Các vấn đề liên quan