TypeError: объект 'float' не повторяется; происходит при вызове класса из другого файла - PullRequest
0 голосов
/ 04 июля 2018

Это мой первый пост на stackoverflow, так что спасибо за помощь. Я относительно новичок в Python, и я впервые работаю над личным проектом, связанным с кодированием. Конечной целью файла является создание класса для построения кривых двигателя на основе входных данных. Мой основной файл в настоящее время:

import motor
import plot

if __name__ == '__main__':
    try:
        x = motor.motor(6.5,0.275,0.0343,1047,6)
        print(x.Imax,x.Imin,x.Tmax,x.Wmax,x.V,x.Kv(),x.Kt())    
        a = map(1047,0.0343,x.kt,0.275,6)
        #a.plot()
    except KeyboardInterrupt:
        print('Quitting')

motor.py работает как положено. Когда код попадает в a = map (1047,0.343, x.kt, 0.275,6), я получаю ошибку: TypeError: объект 'float' не повторяется. map - это класс, который я создал и предоставляется plot.py. Текущий код выглядит следующим образом:

class map:
    def __init__(self,Wmax,Tmax,kt,Imin,V): 
        #Defines Inputs
        self.Wmax = Wmax
        self.Tmax = Tmax
        self.kt = kt
    self.Imin = Imin
        self.V = V

        #Defines motor opperating range
        self.Wrange = np.arange(0,int(self.Wmax),1) 

        #Defines Torque as a function of angular velocity
        #self.T_function = self.Tmax*(1-self.Wrange/self.Wmax)

        #Defines mechanical power as a functionof angular velocity
        #self.Pmech_function = self.Tmax*(1-self.Wrange/self.Wmax)\
        #*self.Wrange

        #Defines electrical power as a function of Torque
        #self.Pelec_function =((self.Tmax*(1-self.Wrange/self.Wmax\
        #))/self.kt+self.Imin)*self.V

        #Defines efficiency as a function of pmech and pelec
        #self.eff_function = (self.Tmax*(1-self.Wrange/self.Wmax)*\
        #self.Wrange)/(((self.Tmax*(1-self.Wrange/self.Wmax))/self\
        #.kt+self.Imin)*self.V) 

        #self.Wlabel = 'Angular Velocity (rad/sec)'
        #self.Tlabel = 'Torque (N-m)'
        #self.Pmech_label = 'Mechanical Power (Watts)'
        #self.Pelec_label = 'Electrical Power (Watts)'
        #self.eff_label ='Efficiency (%)'

""" def plot(self):
        #Creates main window
        fig = plt.figure()

        #Creates four y-axis
        ax = fig.add_subplot(111)
        ax2 = ax.twinx()
        ax3 = ax.twinx()
        ax4 = ax.twinx()

        #Plots the above functions against Wrange
        ax.plot(self.Wrange,self.T_function,'-',color='black')
        ax1.plot(self.Wrange,self.Pmech_function,'-',color='red')
        ax2.plot(self.Wrange,self.Pelec_function,'-',color='blue')
        ax3.plot(self.Wrange,self.eff_function,'-',color='green')

        #Defines labels and grid
        ax4.grid(True)
        ax.set_xlabel(self.Wlabel)
        ax.set_ylabel(self.Tlabel)
        ax1.set_ylabel(self.Pmech_label)
        ax2.set_ylabel(self.Pelec_label)
        ax3.set_ylabel(self.eff_label)
        plt.show()
        """

test = map(1047,0.343,0.00551,0.275,6)
print(test.Wrange)

Когда я запускаю plot.py как собственный файл, две строки теста в функции завершения, как и предполагалось, не содержат ошибок. Как я могу устранить эту ошибку? Есть ли какой-нибудь совет по созданию такой программы?

Редактировать: я не знал, что карта была функцией из стандартной библиотеки. Я буду искать это в будущем. Я также буду сокращать дополнительный код в будущих сообщениях. Спасибо.

1 Ответ

0 голосов
/ 04 июля 2018

Не называйте свой класс "карта". Это имя функции в стандартной библиотеке, поэтому все будет запутано. Ваш звонок a = map(1047,0.343,x.kt,0.275,6) получает стандартную библиотеку, поэтому сообщение об ошибке странное и запутанное. Если вы переименуете класс, все станет более понятным.

По соглашению имена ваших классов должны начинаться с заглавной буквы (частично во избежание такого рода путаницы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...