2010-10-27 46 views
24

Kể từ khi tất cả mọi thứ trong python là một đối tượng, tôi đã tự hỏi nếu có một cách tôi có thể khởi tạo một đối tượng lớp bằng cách sử dụng tên của lớpkhởi đối tượng lớp theo tên

ví dụ,

class Foo: 
    """Class Foo""" 

Làm thế nào tôi có thể truy cập vào lớp này bằng cách "Foo", tức là một cái gì đó giống như c = get_class("Foo")

+1

có thể trùng lặp của [Có python có tương đương với Java Class.forName()?] (Http://stackoverflow.com/questions/452969/does-python-have-an-equivalent-to-java-class- forname) – mikej

Trả lời

44

Nếu lớp là trong phạm vi của bạn:

get_class = lambda x: globals()[x] 

Nếu bạn cần để có được một lớp từ một mô-đun, bạn có thể sử dụng getattr:

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

Vì điều này sử dụng getattr, tôi có thể sử dụng nó cho một đối tượng hàm cũng đúng không? – zsquare

+1

Yep, 'getattr (urllib2, 'urlopen')' hoạt động như mong đợi –

+1

Để lưu ý nhanh, để có được một thể hiện của lớp, nó sẽ cần phải là globals() [x](). – Hazok

-2

Tôi nghĩ suy nghĩ tìm kiếm của bạn thấy http://en.wikipedia.org/wiki/Reflection_%28computer_science%29#Python

Hoặc một ví dụ tốt hơn từ wikipedia tiếng Đức:

>>> # 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! 

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

+3

Liên kết và/hoặc ví dụ của bạn không trả lời được câu hỏi nào cả. –

+3

Một liên kết bằng tiếng Đức! Chỉ cần những gì OP cần thiết! – MestreLion

Các vấn đề liên quan