Vấn đề của tôi là tôi muốn chuyển các đối số vào __init__
với các đối số được chỉ định trong một chuỗi trên dòng lệnh. Ví dụ, tương đương với
import a.b.ClassB as ClassB
instance = ClassB.ClassB['World']
Chuỗi trên dòng lệnh là "a.b.ClassB.ClassB['World']"
Với lớp sau trong mô -đun A.B. classb
class ClassB[]:
def __init__[self, name:str]:
self._name = name
def hello[self]:
print["Hello " + self._name + "!"]
Chúng ta có thể tạo lớp này với
import importlib
def create_instance[class_str:str]:
"""
Create a class instance from a full path to a class constructor
:param class_str: module name plus '.' plus class name and optional parens with arguments for the class's
__init__[] method. For example, "a.b.ClassB.ClassB['World']"
:return: an instance of the class specified.
"""
try:
if "[" in class_str:
full_class_name, args = class_name = class_str.rsplit['[', 1]
args = '[' + args
else:
full_class_name = class_str
args = []
# Get the class object
module_path, _, class_name = full_class_name.rpartition['.']
mod = importlib.import_module[module_path]
klazz = getattr[mod, class_name]
# Alias the the class so its constructor can be called, see the following link.
# See //www.programiz.com/python-programming/methods/built-in/eval
alias = class_name + "Alias"
instance = eval[alias + args, { alias: klazz}]
return instance
except [ImportError, AttributeError] as e:
raise ImportError[class_str]
if __name__ == "__main__":
instance = create_instance["a.b.ClassB.ClassB['World']"]
instance.hello[]
Michel Claveau
18 tháng 7 '05 #6
class Dog:
def bark[self]:
print "Arf!!!"
I have a string:
classname = "Dog"
Làm thế nào tôi có thể tạo một ví dụ về chó từ ClassName? Có bất kỳ phương pháp như vậy như trong Java?
Is there any such methods like those in Java?
Do re mi chel la si do viết:
className = "Dog" Exec ["cl ="+className] b = cl [] b.bark []
Michel Claveau
classname = "Dog"
18 tháng 7 '05 #6
Do re mi chel la si do viết:
classname[].bark[] Arf!!!
Ngoài ra: className = "Dog" exec ["b ="+className+"[]"] b.bark []
hoặc className = "Dog" exec ["cl ="+className] b = cl [] b.bark []
Michel Claveau18 tháng 7 '05 #6
class Dog:
def bark[self]:
print "Arf!!!"Michel Claveau
classname = "Dog"18 tháng 7 '05 #6
Do re mi chel la si do viết:
dog_class = globals[][classname]
dog = dog_class[]
dog.bark[]
Ngoài ra: className = "Dog" exec ["b ="+className+"[]"] b.bark []
import animals
dog_class = getattr[animals, classname]
dog = dog_class[]
dog.bark[]
--
Ksenia
hoặc className = "Dog" exec ["cl ="+className] b = cl [] b.bark []
className = "Dog" Exec ["cl ="+className] b = cl [] b.bark []
Michel Claveau18 tháng 7 '05 #6
class Dog:
def bark[self]:
print "Arf!!!"
I have a string:
classname = "Dog"Làm thế nào tôi có thể tạo một ví dụ về chó từ ClassName? Có bất kỳ phương pháp như vậy như trong Java?
Is there any such methods like those in Java?
Bạn thường nhận được một tham chiếu đến đối tượng lớp [tức là cho chó] bằng cách sử dụng một trong hai globals [], locals [] hoặc getattr [] khi thích hợp cho tình huống cụ thể trong tay ...
[i.e. to Dog] using either globals[], locals[],
or getattr[] as appropriate for the specific
situation at hand...
-Peter
18 tháng 7 '05 #4
Điều này rất hữu ích, cảm ơn!
18 tháng 7 '05 #5
Xin chào ! Ngoài ra: className = "Dog" exec ["b ="+className+"[]"] b.bark []
Also :
classname = "Dog"
exec["b="+classname+"[]"]
b.bark[]
hoặc
className = "Dog" Exec ["cl ="+className] b = cl [] b.bark []
exec["cl="+classname]
b=cl[]
b.bark[]
Michel Claveau
18 tháng 7 '05 #6
Do re mi chel la si do viết:
Ngoài ra: className = "Dog" exec ["b ="+className+"[]"] b.bark []
classname = "Dog"
exec["b="+classname+"[]"]
b.bark[]hoặc className = "Dog" exec ["cl ="+className] b = cl [] b.bark []
classname = "Dog"
exec["cl="+classname]
b=cl[]
b.bark[]
Ugh.
Câu lệnh EXEC [Lưu ý: Đó là một câu lệnh, không phải là một cuộc gọi chức năng như bạn ngụ ý với những điều trên] hiếm khi được yêu cầu hoặc phong cách tốt.
function call as you imply with the above] is rarely
either required or good style.
Trong trường hợp này cũng không.
-Peter
18 tháng 7 '05 #7
Xin chào ! Xin lỗi nhưng :
Sorry, but :
Tuyên bố thực thi không có tác động đến phong cách.
Giống như với exefile hoặc nhập [và khác], phong cách được xác định bởi các nội dung. Thay vào đó đánh giá "Exec" [hoặc nhập khẩu, hoặc Execfile] so với nội dung, đó là một lỗi của quan hệ nhân quả. @-Salutations-Michel Claveau
contents. Rather judge "exec" [or import, or execfile] than the contents,
it is an error of causality.
@-salutations
--
Michel Claveau
18 tháng 7 '05 #8
Tian đã viết:
Làm thế nào tôi có thể tạo một thể hiện của một đối tượng từ một chuỗi?Ví dụ, tôi có một con chó lớp:
Lớp Dog: Def Bark [self]: In "ARF !!!"
def bark[self]:
print "Arf!!!"
Def Factory [class_name]: classes = {'Dog': Dog} Các lớp trở lại [class_name] dog = factory ['dog'] [] -
classes = {
'Dog':Dog
}
return classes[class_name]
dog = Factory['Dog'][]
--
Hilsen/Trân trọng Max M, Đan Mạch
//www.mxm.dk/ đó là khoa học điên rồ
IT's Mad Science
18 tháng 7 '05 #9
Xin chào !
Cuối cùng, đó là giải pháp tốt nhất.
Michel Claveau
18 tháng 7 '05 #10
Chủ đề thảo luận này đã đóng
Câu trả lời đã bị vô hiệu hóa cho cuộc thảo luận này.