python _new_ _call_ _str_
时间: 2023-05-04 14:03:56 浏览: 164
Python中的_new_,_call_,和_str_是几个重要的内置方法。
首先,_new_方法是一个类方法,它会在创建一个实例时被自动调用。这个方法的主要作用是分配内存空间,最终返回一个新的实例对象。在使用_new_方法时,需要传入类作为第一个参数,并且可以有其他的参数。
其次,_call_方法是另一个特殊的方法,它允许我们像调用函数一样调用实例。更具体地说,_call_方法会在我们调用实例时被自动调用,并且我们可以在其中定义我们所需要的逻辑。在使用_call_方法时,需要将入口点函数定义在这个方法中。
最后,_str_方法是一种用于返回对象的字符串表示的方法。在Python中,我们可以使用print语句打印对象,但如果不使用_str_方法,我们将只会得到对象的内存地址。因此,如果我们需要以某种格式打印对象,我们必须在对象中实现_str_方法。
综上所述,_new_,_call_和_str_都是Python中非常重要的特殊方法,可以让我们更好地控制类的实例化,实例对象的逻辑和打印对象的格式。
相关问题
Got keys from plugin meta data ("ibus") QFactoryLoader::QFactoryLoader() checking directory path "/usr/bin/platforminputcontexts" ... loaded library "/home/rvbust/.local/lib/python3.10/site-packages/PyQt5/Qt5/plugins/platforminputcontexts/libcomposeplatforminputcontextplugin.so" QFactoryLoader::QFactoryLoader() checking directory path "/home/rvbust/.local/lib/python3.10/site-packages/PyQt5/Qt5/plugins/styles" ... QFactoryLoader::QFactoryLoader() checking directory path "/usr/bin/styles" ... Traceback (most recent call last): File "/home/rvbust/Documents/FlexLocation_new/ViewerApp.py", line 30, in <module> main() File "/home/rvbust/Documents/FlexLocation_new/ViewerApp.py", line 24, in main main_window = GlyphViewerApp() File "/home/rvbust/Documents/FlexLocation_new/ViewerApp.py", line 10, in __init__ self.setup() File "/home/rvbust/Documents/FlexLocation_new/ViewerApp.py", line 15, in setup self.ui.setupUi(self) File "/home/rvbust/Documents/FlexLocation_new/glyph_view.py", line 33, in setupUi self.actionLoadCloud = QAction(MainWindow) TypeError: 'PySide6.QtGui.QAction.__init__' called with wrong argument types: PySide6.QtGui.QAction.__init__(GlyphViewerApp) Supported signatures: PySide6.QtGui.QAction.__init__(Union[PySide6.QtGui.QIcon, PySide6.QtGui.QPixmap], str, Optional[PySide6.QtCore.QObject] = None) PySide6.QtGui.QAction.__init__(Optional[PySide6.QtCore.QObject] = None) PySide6.QtGui.QAction.__init__(str, Optional[PySide6.QtCore.QObject] = None) QLibraryPrivate::unload succeeded on "/home/rvbust/.local/lib/python3.10/site-packages/PyQt5/Qt5/plugins/platforminputcontexts/libcomposeplatforminputcontextplugin.so" QLibraryPrivate::unload succeeded on "/home/rvbust/.local/lib/python3.10/site-packages/PyQt5/Qt5/plugins/platformthemes/libqgtk3.so" QLibraryPrivate::unload succeeded on "/home/rvbust/.local/lib/python3.10/site-packages/PyQt5/Qt5/plugins/platforms/libqxcb.so" QLibraryPrivate::unload succeeded on "Xcursor" (faked)
这个错误信息出现在实例化 `GlyphViewerApp` 对象时,调用了 `setup` 方法。具体来说,`GlyphViewerApp` 继承自 `QtWidgets.QMainWindow`,而 `setup` 方法中又调用了 `glyph_view.ui` 模块中的 `setupUi` 方法创建了一些 UI 控件,其中包括一个 `QAction` 对象。但是在创建 `QAction` 对象时,传入的参数类型不正确,导致了这个错误。
解决这个问题的方法是,在 `glyph_view.ui` 模块中找到创建 `QAction` 对象的代码,确保参数类型正确。根据错误信息中的提示,`QAction.__init__` 方法支持多种不同的参数类型,需要根据实际情况选择正确的参数类型传入。例如,可以尝试修改为:
```python
self.actionLoadCloud = QAction("Load Cloud", self)
```
这里将第一个参数修改为字符串类型,表示 `QAction` 对象的文本标签。同时,将第二个参数指定为 `self`,表示 `QAction` 对象的父对象为 `GlyphViewerApp` 对象。这样就可以避免参数类型不匹配的错误了。
#pragma warning(disable:4996) //Added on 20200527 #include "stdafx.h" #include "CallbackImp.h" #include <Windows.h> #include <atlstr.h> #include <stdio.h> #pragma comment(lib, "Ws2_32.lib") //BYTE AddressInquiryCmd(CSerialPort serialPort); //float Read_sensor_angle(SOCKET sockClient, byte ADDR); extern char scan_folder[32]; extern FILE *fp; void CCallbackImp::Process(int nEventID, CR_Event* pEventParam) { switch (nEventID) { case CR_EVT_NEW_FRAME: { #if (defined WIN32 || defined _WIN32 || defined _W64 || defined WINCE) if (m_isImageSaved) { int nBuffIdx = *(int*)pEventParam->pData; stringstream ss; ss << scan_folder; //ss << "D:/Data/" << pEventParam->nDetrIndex << "/"; //string folder = ss.str(); //_mkdir(folder.c_str()); ss<< pEventParam->nWidth << "x" << pEventParam->nHeight; string folder = ss.str(); _mkdir(folder.c_str()); int nImgSize = pEventParam->nWidth*pEventParam->nHeight*2 + m_nFrmHeaderLen; if (m_pBuffStartAddr != NULL) { char* pCurrFrame = (char*)m_pBuffStartAddr + nBuffIdx*nImgSize; //printf("Detector index in call back image is %d.\n", pCurrFrame[22]); int nFrameId = *(int*)(pCurrFrame + 8); ss.str(""); ss << folder << "\\"<< setw(4)<< setfill('0') <<nFrameId % 9999 <<".raw"; printf("frame %d\n", nFrameId); PrintMatrix(ss.str(), string(pCurrFrame, nImgSize)); } } #endif } break; 转换为python语言
以下是将该C++代码转换为Python语言的等效代码:
```python
import os
import socket
import struct
scan_folder = ""
fp = None
class CCallbackImp:
def __init__(self):
self.isImageSaved = False
self.nFrmHeaderLen = 0
self.pBuffStartAddr = None
def Process(self, nEventID, pEventParam):
if nEventID == CR_EVT_NEW_FRAME:
if self.isImageSaved:
nBuffIdx = struct.unpack("i", pEventParam.pData)[0]
ss = scan_folder
ss += str(pEventParam.nWidth) + "x" + str(pEventParam.nHeight)
folder = ss
os.makedirs(folder, exist_ok=True)
nImgSize = pEventParam.nWidth * pEventParam.nHeight * 2 + self.nFrmHeaderLen
if self.pBuffStartAddr is not None:
pCurrFrame = self.pBuffStartAddr + nBuffIdx * nImgSize
nFrameId = struct.unpack("i", pCurrFrame + 8)[0]
ss = folder + "\\" + str(nFrameId % 9999).zfill(4) + ".raw"
print("frame", nFrameId)
PrintMatrix(ss, pCurrFrame[:nImgSize])
def PrintMatrix(filename, data):
# 实现打印矩阵到文件的逻辑
pass
# 示例用法
callbackImp = CCallbackImp()
nEventID = CR_EVT_NEW_FRAME
pEventParam = CR_Event()
# 设置pEventParam的属性值
callbackImp.Process(nEventID, pEventParam)
```
请注意,这只是一个简单的转换示例,并不能保证代码在Python中完全运行。你可能需要根据你的具体需求进行适当的调整和修改。
阅读全文