Python从内部类访问外部类的self
我试图在Python的外部类中嵌套一个内部类,以便在调用内部类的函数时获得更好的结构 因此,我有一个python文件,其中包含以下内容,称为Python从内部类访问外部类的self,python,class,nested,Python,Class,Nested,我试图在Python的外部类中嵌套一个内部类,以便在调用内部类的函数时获得更好的结构 因此,我有一个python文件,其中包含以下内容,称为mvpSerial.py: import struct from numpy import uint32 class MVP: def __init__(self): self.__ser = self.__mvp_connect() return def __new__(cls): r
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()
import mvpSerial
mvp = mvpSerial.MVP()
mvp.cu.pump_set_pwm(35)
mvp.ic.set_target_temperature(43)
但是当我执行代码时,我得到以下错误:
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'
回溯(最近一次呼叫最后一次):
文件“C:\Program Files\JetBrains\PyCharm Community Edition 2019.3.3\plugins\python ce\helpers\pydev\pydevd.py”,第1434行,在_exec中
pydev_imports.execfile(文件、全局、局部)#执行脚本
文件“C:\Program Files\JetBrains\PyCharm Community Edition 2019.3.3\plugins\python ce\helpers\pydev\\u pydev\u imps\\u pydev\u execfile.py”,第18行,在execfile中
exec(编译(内容+“\n”,文件,'exec'),全局,loc)
文件“C:/Users/User/Documents/GitHub/qc python/qc_main.py”,第11行,在
mvp.cu.泵组pwm()
TypeError:pump_set_pwm()缺少1个必需的位置参数:“self”
OO语言对我来说是新的,因为到目前为止我只在微控制器上编程过C。
我不需要是嵌套类,我只想调用属于CU
或IC
overmvp.CU
和mvp.IC
的函数,而不是编写mvp.IC\u set\u target\u temperature
等,从而在mvp
类中没有一堆函数
提前感谢我用切普纳的提示解决了问题: 我把这个班分成四个班:
- EvoSer:所有与串行运动的通信
- MVP:实现
和cu
经常使用的一些功能ic
- 每个系统的CU和IC类
class EvoSer:
def __init__(self, ser=None):
if ser is None:
self.__ser = None
self.mvp_connect()
else:
self.__ser = ser
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)
当创建MVP类的新实例时,它从调用init
唤起者:
并创建CU和IC的实例
有了这些,我可以写:
mvp.cu.pump_set_pwm()
import mvpSerial
mvp = mvpSerial.MVP()
mvp.cu.pump_set_pwm(35)
mvp.ic.set_target_temperature(43)
我用
chepner
的提示解决了这个问题:
我把这个班分成四个班:
- EvoSer:所有与串行运动的通信
- MVP:实现
和cu
经常使用的一些功能ic
- 每个系统的CU和IC类
class EvoSer:
def __init__(self, ser=None):
if ser is None:
self.__ser = None
self.mvp_connect()
else:
self.__ser = ser
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)
当创建MVP类的新实例时,它从调用init
唤起者:
并创建CU和IC的实例
有了这些,我可以写:
mvp.cu.pump_set_pwm()
import mvpSerial
mvp = mvpSerial.MVP()
mvp.cu.pump_set_pwm(35)
mvp.ic.set_target_temperature(43)
内部类在Python中并不常见。为
MVP
之外的组件定义类,并将这些类的实例存储在MVP
的实例中。不过,内部类只是围绕可能只是函数的方法的不必要包装。内部类在Python中并不常见。为MVP
之外的组件定义类,并将这些类的实例存储在MVP
的实例中。不过,您的内部类只是围绕可能只是函数的方法的不必要包装。