Soru Sınıf nesnesini ada göre başlat


Pitondaki her şey bir nesne olduğu için, sınıfın adını kullanarak bir sınıf nesnesini başlatabileceğimin bir yolu olup olmadığını merak ediyordum.

Örneğin,

class Foo:
    """Class Foo"""

Bu sınıfa nasıl "Foo" ile ulaşabilirim, örneğin c = get_class("Foo")


24
2017-10-27 07:50


Menşei


olası kopyası Piton Java Class.forName () ile eşdeğer mi? - mikej


Cevaplar:


Sınıf kapsamınızdaysa:

get_class = lambda x: globals()[x]

Bir modülden bir sınıf almanız gerekiyorsa kullanabilirsiniz getattr:

import urllib2
handlerClass = getattr(urllib2, 'HTTPHandler')

44
2017-10-27 07:58



Bu getattr'ı kullandığından, bunu bir işlev nesnesi için de kullanabilir miyim? - zsquare
Evet, getattr(urllib2, 'urlopen') beklendiği gibi çalışıyor - Brian McKenna
Hızlı bir not için, sınıfın bir örneğini almak için globals () [x] () olması gerekir. - Hazok


Duydun mu modülü incelemek?

Çıkış yapmak bu snippet Buldum.


1
2017-10-27 08:00



-1: OP, tüm sınıf isimlerini listelemek yerine, isme göre bir sınıf almak ister. - MestreLion


Arama düşüncenizi düşünüyorum görmek http://en.wikipedia.org/wiki/Reflection_%28computer_science%29#Python

Ya da alman wikipedia'dan daha iyi bir örnek:

>>> # the object
>>> class Person(object):
...    def __init__(self, name):
...        self.name = name
...    def say_hello(self):
...        return 'Hallo %s!' % self.name
...
>>> ute = Person('Ute')
>>> # direct
>>> print ute.say_hello()
Hallo Ute!
>>> # Reflexion
>>> m = getattr(ute, 'say_hello')()
>>> # (equals ute.say_hello())
>>> print m
Hallo Ute!

itibaren http://de.wikipedia.org/wiki/Reflexion_%28Programmierung%29#Beispiel_in_Python


-2
2017-10-27 07:58



Bağlantınız ve / veya örnek soruya hiç cevap vermiyor. - A-B-B
Almanca bir bağlantı! Sadece OP gerekli ne! - MestreLion