Hướng dẫn create object from string python - tạo đối tượng từ chuỗi python

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 Claveau

18 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 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?

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.

Làm cách nào để chuyển đổi một chuỗi thành một đối tượng trong Python?

Sử dụng hàm json.loads []. JSON. Hàm tải [] chấp nhận làm đầu vào một chuỗi hợp lệ và chuyển đổi nó thành từ điển Python. Quá trình này được gọi là Deserialization - hành động chuyển đổi một chuỗi thành một đối tượng. loads[] function. The json. loads[] function accepts as input a valid string and converts it to a Python dictionary. This process is called deserialization – the act of converting a string to an object.

Làm thế nào để bạn tạo một đối tượng lớp từ một chuỗi trong Python?

Các lớp và đối tượng Python..
Tạo một lớp học.Để tạo một lớp, hãy sử dụng lớp từ khóa: ....
Tạo đối tượng.Bây giờ chúng ta có thể sử dụng lớp có tên MyClass để tạo các đối tượng: ....
Tham số tự.....
Sửa đổi thuộc tính đối tượng.....
Xóa thuộc tính đối tượng.....
Xóa đối tượng ..

Làm cách nào để tạo một đối tượng động trong Python?

Mã Python có thể được nhập động và các lớp có thể được tạo động khi chạy.Các lớp có thể được tạo động bằng cách sử dụng hàm loại [] trong python.Hàm loại [] được sử dụng để trả về loại đối tượng.Cú pháp trên trả về loại đối tượng.using the type[] function in Python. The type[] function is used to return the type of the object. The above syntax returns the type of object.

Phương pháp __ str __ trong Python là gì?

Python __str __ [] Phương thức này trả về biểu diễn chuỗi của đối tượng.Phương thức này được gọi là hàm in [] hoặc str [] được gọi trên một đối tượng.Phương thức này phải trả về đối tượng chuỗi.returns the string representation of the object. This method is called when print[] or str[] function is invoked on an object. This method must return the String object.

Chủ Đề