我试图在Python的外部类中嵌套一个内部类,以便在调用内部类的函数时获得更好的结构
因此,我有一个python文件,其中包含以下内容,称为mvpSerial.py
:
import struct
from numpy import uint32
class MVP:
def __init__(self):
self.__ser = self.__mvp_connect()
return
def __new__(cls):
return super(MVP, cls).__new__(cls)
def __mvp_connect(self):
"""Tries to connect to any
connected prototype and return serial object"""
print("Looking for MVP on all COM Ports....");
# ...
return serialObject
def __evo_mvp_transfer(self, cmd, major=0, minor=0, data=0, tries=5):
# do something with serial object of self
# and return bytearray full of data
self.__ser.write(data)
return self.__ser.read(self.__ser.in_waiting)
class cu(object):
def pump_set_pwm(self, duty):
self.outer.__evo_mvp_transfer(1, 24, 4, uint32(duty))
class ic:
def set_target_temperature(self, target):
self.__evo_mvp_transfer(1, 36, 4, float(target))
我正在另一个文件中导入此文件:
import mvpSerial
mvp = mvpSerial.MVP()
mvp.cu.pump_set_pwm(35)
mvp.ic.set_target_temperature(43)
在这个文件中,我想创建一个MVP
类的实例,并调用cu
和ic
的嵌套函数的成员,因为物理MVP有两个名为CU
和IC
的系统连接到它
所以,与其打电话
mvp.cu_pump_set_pwm()
我想将“mvp”一类分为“cu”和“ic”,以便更好、更清晰地了解真实的物理世界,并写出:
mvp.cu.pump_set_pwm()
但是当我执行代码时,我得到以下错误:
Traceback (most recent call last):
File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.3.3\plugins\python-ce\helpers\pydev\pydevd.py", line 1434, in _exec
pydev_imports.execfile(file, globals, locals) # execute the script
File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.3.3\plugins\python-ce\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "C:/Users/User/Documents/GitHub/qc-python/QC_main.py", line 11, in <module>
mvp.cu.pump_set_pwm()
TypeError: pump_set_pwm() missing 1 required positional argument: 'self'
OO语言对我来说是新的,因为到目前为止我只在微控制器上编程过C。
我不需要是嵌套类,我只想调用属于CU
或IC
的函数,而不是编写mvp.ic_set_target_temperature
等,以便在MVP
类中没有一堆函数
提前谢谢
我用
chepner
的提示解决了这个问题:我把这个班分成四个班:
cu
和ic
经常使用的函数MVP、CU和IC是EvoSer的子类,因此继承了EvoSer的所有功能:
当创建MVP类的新实例时,它从调用init 唤起者:
并创建CU和IC的实例
有了这些,我可以写:
相关问题 更多 >
编程相关推荐