2016-05-08 2 views
2

Я сделал класс для работы с нагревательными проводами:имя доступа питона объектов

class Heating_wire: 

    def __init__(self, ro, L,d,alpha): 

     self.ro = ro 
     self.L = L 
     self.d = d 
     self.alpha = alpha 
     self.RT = [1] 
     self.vector_T = [1] 
    def get_R20(self): 
     self.R_20 = self.ro*self.L/(np.pi*(self.d/2)**2) 

    def calcular_RT(self,vector_temp): 
     self.vector_T = vector_temp 
     self.RT = [self.R_20*(1 + temp*self.alpha) for temp in vector_temp ] 
     return self.RT 

Instantiate некоторых объектов:

kantal = Heating_wire(1.45,0.25,0.3,4e-5) 
nicromo = Heating_wire(1.18,0.25,0.3,0.0004) 
ferroniquel = Heating_wire(0.86,0.25,0.3,9.3e-4) 

wires = [kantal,nicromo,ferroniquel] 

И сделал сюжет:

leg = [] 
vector_temp = np.linspace(20,1000,1000) 
for wire in sorted(wires): 
    wire.get_R20() 
    wire.get_RT(vector_temp) 
    line, = plt.plot(wire.vector_T,wire.RT) 
    leg.append(line) 
plt.legend(leg,sorted(wires)) 

вопрос что я не получаю правильные имена в легенде, но ссылка на объекты:

enter image description here

Если добавить имя атрибута

def __init__(self,name, ro, L,d,alpha): 
    self.name = name 

Я могу добавить имена

leg = [] 

names= [] 
vector_temp = np.linspace(20,1000,1000) 
for wire in sorted(wires): 
    wire.get_R20() 
    wire.get_RT(vector_temp) 
    line, = plt.plot(wire.vector_T,wire.RT) 
    leg.append(line) 
    names.append(wire.name) 
plt.legend(leg,names,loc='best') 

enter image description here

Но мне интересно, если есть более простой способ т решить эту проблему используя непосредственно названия объектов в списке проводов:

kantal = Heating_wire(1.45,0.25,0.3,4e-5) 
nicromo = Heating_wire(1.18,0.25,0.3,0.0004) 
ferroniquel = Heating_wire(0.86,0.25,0.3,9.3e-4) 

wires = [kantal,nicromo,ferroniquel] 
+3

Попробуйте реализовать либо методы '__repr__', либо' __str__' для вашего класса –

+4

Объекты Python не имеют имен. Переменные имеют имена, но объекты не имеют записи о том, какие переменные относятся к ним. – user2357112

ответ

1

Просто сделайте это так, и нет никакого дублирования:

wires = [ 
    Heating_wire("kantal", 1.45,0.25,0.3,4e-5), 
    Heating_wire("nicromo", 1.18,0.25,0.3,0.0004), 
    Heating_wire("ferroniquel", 0.86,0.25,0.3,9.3e-4) 
] 

Чтобы ответить на ваш вопрос, нет, объекты не могут получить доступ имен они были даны.

Смежные вопросы