.
Tôi nghĩ rằng tôi thực sự hiểu biết về việc Python làm như thế nào do nền C#/C ++ của tôi. Vì vậy, đây là những gì tôi đang cố gắng làm ngay lúc này.
Tôi bắt đầu với hai mô-đun để thiết lập phần còn lại của dự án của mình, một phần dưới dạng kiểm tra tỉnh táo và chứng minh khái niệm. Một mô -đun ghi lại mọi thứ vào một tệp khi tôi đi trong khi cũng lưu trữ dữ liệu từ nhiều mô -đun [để cuối cùng đóng gói tất cả và bỏ chúng theo yêu cầu] thực hiện tất cả những điều này trong Pycharm và đề cập đến các cảnh báo lỗi mà nó gợi ý bằng cách này và sử dụng Python 2.7
Module 1:
src\helpers\logHelpers.py
class LogHelpers:
class log:
def classEnter[]:
#doing stuff
def __init__[self]:
self.myLog = LogHelpers.log[] #forgot to mention this was here initially
[..] various logging functions and variables to summarize what's happening
__builtin__.mylogger = LogHelpers
Module 2:
src\ULTs\myULTs.py
mylogger.myLog.classEnter[]
[Cả hai mô -đun và SRC gốc \ đều có tệp init.py trống trong chúng]init.py file in them]
Vì vậy, theo phản hồi hoàn toàn tuyệt vời ở đây [Python - khả năng hiển thị của các biến toàn cầu trong các mô -đun nhập khẩu] ở giai đoạn này, điều này sẽ hoạt động, nhưng 'Mylogger' trở thành 'tham chiếu chưa được giải quyết' '
Vì vậy, đó là một cách tiếp cận. Tôi cũng đã thử một cái toàn cầu thẳng hơn [Python: Cách tạo biến mô-đun chéo?]
Module 1:
src\helpers\logHelpers.py
class LogHelpers:
class log:
def classEnter[self]:
#doing stuff
def __init__[self]:
self.myLog = LogHelpers.log[] #forgot to mention this was here initially
[..] various logging functions and variables to summarize what's happening
mylogger = LogHelpers
__init__.py
__all__ = ['LogHelpers', hexlogger]
from .logHelpers import *
Module 2:
src\ULTs\myULTs.py
from helpers import mylogger
mylogger.myLog.classEnter[]
Phiên bản này nhận được lỗi "không được thông báo" "trong tập thể, mà các báo cáo khác nhau dường như chỉ ra có nghĩa là Mylogger không được khởi tạo [mã lỗi sai nhưng đó có vẻ là ý nghĩa của nó]
Và sau đó tôi đã thử cái này ..
Module 1:
src\helpers\logHelpers.py
class LogHelpers:
class log:
def classEnter[self]:
#doing stuff
def __init__[self]:
self.myLog = LogHelpers.log[] #forgot to mention this was here initially
[..] various logging functions and variables to summarize what's happening
__mylogger = LogHelpers
__init__.py
__all__ = ['LogHelpers', hexlogger]
from .logHelpers import *
Module 2:
src\ULTs\myULTs.py
from helpers import mylogger
def someFunction[self]:
global mylogger
mylogger.myLog.classEnter[]
Và phiên bản này nhận được 'biến toàn cầu không được xác định ở mức độ mô -đun' khi tôi di chuột của Mylogger toàn cầu.
Sau đó, có ý tưởng về mô -đun khác theo dõi ví dụ của chính nó về một lớp, nếu cuối cùng tôi phải thực hiện phương pháp đó và điều phối chúng .. nhưng đó là một vụ hack khi xem xét những gì tôi đang cố gắng làm.
Đó là loại nơi tôi đang ở, đó là ý chính của những gì tôi đang cố gắng làm ... Tôi đang đọc qua nhiều câu hỏi tương tự như tôi có thể nhưng tất cả chúng dường như trở lại với những giải pháp này [mà Dường như không hoạt động] hoặc nói 'Đừng làm điều đó' [nói chung là lời khuyên tốt nhưng tôi không thực sự theo cách của Pythony ưa thích đẩy tất cả chúng vào một thư mục]
Suy nghĩ? .
.
class testClass:
def __init__[self]:
self.testVar = 2
def incrementVar[self]:
self.testVar += 1
myClass = testClass[]
Đặt nó qua init.pyinit.py
__all__ = [myClass]
from .logHelpers import myClass
Đã đi đến mô -đun khác và
from helpers import myClass
class Test_LogHelpers[unittest.TestCase]:
def test_mini[self]:
myClass.incrementVar[]
Chạy nó trực tiếp thay vì nhìn vào Pycharm, không có gì toàn cầu .. NameError: name 'myClass is not defined
Vì vậy, vẫn ở hình vuông một :[ [và vẫn cần lưu trữ trạng thái]
[Chỉnh sửa] Thêm Traceback:
Traceback [most recent call last]:
File "C:\Program Files [x86]\JetBrains\PyCharm Community Edition 3.4.1\helpers\pycharm\utrunner.py", line 124, in module = loadSource[a[0]]
File "C:\Program Files [x86]\JetBrains\PyCharm Community Edition 3.4.1\helpers\pycharm\utrunner.py", line 40, in loadSource module = imp.load_source[moduleName, fileName]
File "C:\[...mylocation...]\py\src\ULTs\LogHelpers_ULT.py", line 3, in from helpers import myClass
File "C:\[...mylocation...]\py\src\helpers\__init__.py", line 7, in
__all__ = [myClass]
NameError: name 'myClass' is not defined
================================================== ===========================
KK, tôi đã làm cho nó làm việc với miniclass. Tôi không biết tại sao phương pháp / cách tiếp cận khác không hoạt động, nhưng điều này dường như sửa chữa mọi thứ. .
**logHelpers.py**
[... some static logging functionality ...]
class testClass:
def __init__[self]:
self.testVar = 2
def incrementVar[self, source]:
self.testVar += 1
mylogger.myLog.info[source + " called, new val: " + str[self.testVar]]
myClass = testClass[]
**test_LogHelpers_ULT.py**
import unittest
from helpers.logHelpers import myClass
class Test_LogHelpers[unittest.TestCase]:
def test_mini[self]:
myClass.incrementVar["LogHelpers"]
Vì một số lý do, bỏ qua init.py [và để trống] và đi cho nhập khẩu rõ ràng hoạt động. Nó cũng duy trì trạng thái - Tôi đã tạo một bản sao của tệp kiểm tra và đầu ra nhật ký của tôi có '3' để tệp đầu tiên gọi trình trợ giúp và '4' để tệp thứ hai gọi người trợ giúp.init.py [and leaving it blank] and going for the explicit importation worked. It also maintained state - I created a duplicate of the test file and my log output correctly had '3' for the first file to call the helper, and '4' for the second file to call the helper.
Cảm ơn Daniel Roseman vì sự giúp đỡ và đề xuất, họ đã cho tôi nhìn thêm một chút theo đúng hướng. Nếu bạn có thể nhận ra lý do tại sao những thứ trước đó không hoạt động, nó sẽ được đánh giá cao chỉ để thêm vào sự hiểu biết của tôi về ngôn ngữ này, nhưng tôi sẽ tiếp tục và đánh dấu câu trả lời của bạn là 'trả lời' vì nó có một số phản hồi rất hữu ích.