Hướng dẫn python dynamic class instantiation - khởi tạo lớp động python

Tôi có một loạt các lớp trong một mô -đun. Hãy cùng nói nào:

'''players.py'''

class Player1:
    def __init__[self, name='Homer']:
        self.name = name

class Player2:
    def __init__[self, name='Barney']:
        self.name = name

class Player3:
    def __init__[self, name='Moe']:
        self.name = name
...

Bây giờ, trong một mô -đun khác, tôi muốn tự động tải tất cả các lớp trong

# this does not throw an error
ai_player1 = ai_players[0][]
print ai_player1
# >> 'Homer'
5 và khởi tạo chúng. Tôi sử dụng mô -đun Python
# this does not throw an error
ai_player1 = ai_players[0][]
print ai_player1
# >> 'Homer'
6 cho việc này.

'''main.py'''
import inspect
import players

ai_players = inspect.getmembers[players, inspect.isclass]
# ai_players is now a list like: [['Player1',],[...]
ai_players = [x[1] for x in ai_players]
# ai_players is now a list like: [, >> import players
>>> import inspect
>>> ai_players = inspect.getmembers[players, 
...              lambda x: inspect.isclass[x] and issubclass[x, players.Player]]
>>> ai_players = [x[1] for x in ai_players]
>>> ai_players[0].__init__.func_defaults
>>> print ai_players[0].__init__.func_defaults
None
>>> players.Player1.__init__.func_defaults
['Homer',]
1, như thế này:

'''main.py'''
import inspect
import players

ai_players = inspect.getmembers[players, inspect.isclass]
# ai_players is now a list like: [['Player1',],[...]
ai_players = [x[1] for x in ai_players]
# ai_players is now a list like: [, >> import players
>>> import inspect
>>> ai_players = inspect.getmembers[players, 
...              lambda x: inspect.isclass[x] and issubclass[x, players.Player]]
>>> ai_players = [x[1] for x in ai_players]
>>> ai_players[0].__init__.func_defaults
>>> print ai_players[0].__init__.func_defaults
None
>>> players.Player1.__init__.func_defaults
['Homer',]
7 được tạo ở trên, đoạn mã sau sẽ in giá trị
>>> import players
>>> import inspect
>>> ai_players = inspect.getmembers[players, 
...              lambda x: inspect.isclass[x] and issubclass[x, players.Player]]
>>> ai_players = [x[1] for x in ai_players]
>>> ai_players[0].__init__.func_defaults
>>> print ai_players[0].__init__.func_defaults
None
>>> players.Player1.__init__.func_defaults
['Homer',]
8, mà không để lại dấu vết:

'''main.py'''
import inspect
import players

ai_players = inspect.getmembers[players, inspect.isclass]
# ai_players is now a list like: [['Player1',],[...]
ai_players = [x[1] for x in ai_players]
# ai_players is now a list like: [, > 'Homer'
0

# this does not throw an error
ai_player1 = ai_players[0][]
print ai_player1
# >> 'Homer'
1

9.9. Máy phát điệnGenerators¶

Máy phát điện là một công cụ đơn giản và mạnh mẽ để tạo ra các trình lặp. Chúng được viết giống như các chức năng thông thường nhưng sử dụng câu lệnh

'''main.py'''
import inspect
import players

ai_players = inspect.getmembers[players, inspect.isclass]
# ai_players is now a list like: [['Player1',],[...]
ai_players = [x[1] for x in ai_players]
# ai_players is now a list like: [, > 'Homer'
2

# this does not throw an error
ai_player1 = ai_players[0][]
print ai_player1
# >> 'Homer'
3

Bất cứ điều gì có thể được thực hiện với các trình tạo cũng có thể được thực hiện với các trình lặp dựa trên lớp như được mô tả trong phần trước. Điều làm cho các trình tạo trở nên nhỏ gọn là các phương thức

'''main.py'''
import inspect
import players

ai_players = inspect.getmembers[players, inspect.isclass]
# ai_players is now a list like: [['Player1',],[...]
ai_players = [x[1] for x in ai_players]
# ai_players is now a list like: [, 

Bài Viết Liên Quan

Chủ Đề