klasės inicializavimas iš string tipo

C
  • 10 Grd '09

Sveiki, iškilo toks klausimas, kaip sukurti klasę turint jos pavadinimą string tipo reikšme.

pvz:

class A:
    pass

if __name__ == '__main__':
    name = 'A'
    a = name.to_class()

ir paskutinė eilutė žinoma, kad nesuveiks, bet kaip reikia padaryti, kad gauti klasės objektą iš klasės vardo stringo.

C
  • 10 Grd '09

Giliau ir ilgiau paieškojęs radau. Ir ne vieną, o kelis būdus. Taigi, jei kam reiks:

a = globals()'class_name'
a = locals()'class_name'
a = getattr(module, class_name_in_string)

ir paskutinis būdas su eval, bet jis gan pavojingas, todėl čia jo nerašysiu

S
  • 19 Sau '10

Šiaip tai python kalboje, geriau naudoti ne string tipo reikšmes perduoti objektams, o paprasčiausiai nuorodą į tą objektą:

class A:
    pass

if __name__ == '__main__':
    name = A
    a = name()
K
  • 4 Vas '10

As cia gal ne labai y tema bet apie string, turiu klausima. Turiu susirases y faila string pavidalu tokius duomenis 2010-01-12 20:20:12.345 , nusiskaitau is failo man reikiama laika, bet jis string pavaidalo ir negaliu daryt jokiu veiksmu(+, -). kaip man pasiverst i kita formata, su kuriuo galeciau atlikt veiksmus? arba kokiu budu yrasinet y faila kad poto nusiskaitant nekiltu problemu ir galeciau dirbt su tais duoemnim? Aciu.

N
  • 5 Vas '10

to kar0lis: visu pirma reiktu nepatingeti ir smegenis pasukti, o tada butu m sumastes, kad googlo reik paklausit klausimo: "python string to date".
Na o googlas budamas geras tau pirmasis variantais jau butu ispjoves tai ko tau reikia.
stai vienas is variantu ka radau pirmuosiuose urluose:

import time
datestring = "21Jun2000"
c = time.strptime(datestring,"%d%b%Y")
time.strftime("%d %b %Y",c)
'21 Jun 2000'

K
  • 5 Vas '10

Isbandytas jau sitas ne syki, nieko gero, tiksliau jis nesuveikia kai man reik kad grazintu milisec, arba kitaip tariant nerandu tokio directive'o:
time0=f.readline()[55:67]
b=time.strptime(time0,'%H:%M:%S.%m')
print time.strftime('%H:%M:%S.%m',b)
ir ismeta:
ValueError: unconverted data remains: 25
gal numanot kaip man %m uzrasyt, ar vietoj jo kazka kad grazintu milisec visa tryzenkli sk, o ne tik viena skaitmeni?

S
  • 7 Vas '10

Kiek žinau python datetime objektas nesaugo milisekundžių, todėl gali padaryti tik taip:

from datetime import datetime
t = '2010-01-12 20:20:12.345'
c = datetime.strptime(t, '%Y-%m-%d %H:%M:%S.%f')

Beje, jei neklystu, šitas veiks tik nuo python 2.6