Nếu bạn thực sự muốn truy xuất các lớp bạn thực hiện với một chuỗi, bạn nên lưu trữ [hoặc được nói đúng, tham khảo] chúng trong một từ điển. Rốt cuộc, điều đó cũng sẽ cho phép đặt tên cho các lớp học của bạn ở cấp độ cao hơn và tránh phơi bày các lớp không mong muốn.
Ví dụ, từ một trò chơi trong đó các lớp diễn viên được xác định trong Python và bạn muốn tránh các lớp chung khác được tiếp cận bằng đầu vào của người dùng.
Một cách tiếp cận khác [như trong ví dụ dưới đây] sẽ tạo ra một lớp hoàn toàn mới, nắm giữ dict
ở trên. Cái này sẽ:
- Cho phép nhiều chủ sở hữu lớp được thực hiện cho tổ chức dễ dàng hơn [như, một cho các lớp diễn viên và một cho các loại âm thanh];
- Thực hiện sửa đổi cho cả người giữ và các lớp được tổ chức dễ dàng hơn;
- Và bạn có thể sử dụng các phương thức lớp để thêm các lớp vào dict. [Mặc dù sự trừu tượng dưới đây không thực sự cần thiết, nhưng nó chỉ đơn thuần là ... "Minh họa"].
Example:
class ClassHolder:
def __init__[self]:
self.classes = {}
def add_class[self, c]:
self.classes[c.__name__] = c
def __getitem__[self, n]:
return self.classes[n]
class Foo:
def __init__[self]:
self.a = 0
def bar[self]:
return self.a + 1
class Spam[Foo]:
def __init__[self]:
self.a = 2
def bar[self]:
return self.a + 4
class SomethingDifferent:
def __init__[self]:
self.a = "Hello"
def add_world[self]:
self.a += " World"
def add_word[self, w]:
self.a += " " + w
def finish[self]:
self.a += "!"
return self.a
aclasses = ClassHolder[]
dclasses = ClassHolder[]
aclasses.add_class[Foo]
aclasses.add_class[Spam]
dclasses.add_class[SomethingDifferent]
print aclasses
print dclasses
print "======="
print "o"
print aclasses["Foo"]
print aclasses["Spam"]
print "o"
print dclasses["SomethingDifferent"]
print "======="
g = dclasses["SomethingDifferent"][]
g.add_world[]
print g.finish[]
print "======="
s = []
s.append[aclasses["Foo"][]]
s.append[aclasses["Spam"][]]
for a in s:
print a.a
print a.bar[]
print "--"
print "Done experiment!"
Điều này trả lại cho tôi:
=======
o
o
=======
Hello World!
=======
0
1
--
2
6
--
Done experiment!
Một thử nghiệm thú vị khác để làm với những điều đó là thêm một phương pháp làm dấy vào ClassHolder
để bạn không bao giờ mất tất cả các lớp bạn đã làm:^]
CẬP NHẬT: Cũng có thể sử dụng một bộ trang trí làm tốc ký. It is also possible to use a decorator as a shorthand.
class ClassHolder:
def __init__[self]:
self.classes = {}
def add_class[self, c]:
self.classes[c.__name__] = c
# -- the decorator
def held[self, c]:
self.add_class[c]
# Decorators have to return the function/class passed [or a modified variant thereof], however I'd rather do this separately than retroactively change add_class, so.
# "held" is more succint, anyway.
return c
def __getitem__[self, n]:
return self.classes[n]
food_types = ClassHolder[]
@food_types.held
class bacon:
taste = "salty"
@food_types.held
class chocolate:
taste = "sweet"
@food_types.held
class tee:
taste = "bitter" # coffee, ftw ;]
@food_types.held
class lemon:
taste = "sour"
print[food_types['bacon'].taste] # No manual add_class needed! :D
Lập trình bên PythonserverServer Side ProgrammingProgramming
Ngoài lập trình cơ bản - Python trung gian
Phổ biến nhất
36 bài giảng 3 giờ 3 hours
Mohammad Nauman
Chi tiết hơn
Học máy thực tế bằng cách sử dụng Python
Người bán hàng giỏi nhất
91 bài giảng 23,5 giờ 23.5 hours
Manas Dasgupta
Chi tiết hơn
Học máy thực tế bằng cách sử dụng Python
Người bán hàng giỏi nhất 6 hours
Manas Dasgupta
Chi tiết hơn
Học máy thực tế bằng cách sử dụng Python
Người bán hàng giỏi nhất
class Foobar: pass print eval["Foobar"] print type[Foobar]
91 bài giảng 23,5 giờ
__main__.Foobar
Manas Dasgupta
Người bán hàng giỏi nhất
import sys class Foobar: pass def str_to_class[str]: return getattr[sys.modules[__name__], str] print str_to_class["Foobar"] print type[Foobar]
91 bài giảng 23,5 giờ
__main__.Foobar
Manas Dasgupta
Khoa học dữ liệu thực tế sử dụng Python
- 22 bài giảng 6 giờ
- Đưa ra một chuỗi làm đầu vào người dùng cho hàm Python, tôi muốn lấy một đối tượng lớp ra khỏi nó nếu có một lớp có tên đó trong không gian tên hiện được xác định.
- Thí dụ
- Đầu ra
- Một cách khác để chuyển đổi chuỗi thành đối tượng lớp như sau
- Rajendra Dharmkar
- Cập nhật ngày 16 tháng 6 năm 2020 08:35:03
- Câu hỏi và câu trả lời liên quan
- Làm thế nào để chuyển đổi chuỗi ngày Python thành đối tượng ngày?
- Làm thế nào để chuyển đổi một chuỗi thành đối tượng JavaScript?
- Làm thế nào để chuyển đổi một đối tượng ngày JavaScript thành một chuỗi?
- Làm thế nào để chuyển đổi một đối tượng X thành một biểu diễn chuỗi trong Python?
- Làm thế nào để chuyển đổi chuỗi JSON thành một đối tượng JavaScript?
- Chuyển đổi chuỗi thành đối tượng phân cấp - JavaScript
- Làm thế nào để chuyển đổi đối tượng InputStream thành một chuỗi trong Java?
- Python - Cách chuyển đổi chuỗi thành đối tượng JSON
Làm thế nào để chuyển đổi một ngày JS sang một đối tượng ngày Python?
Làm thế nào để chuyển đổi chuỗi dấu thời gian thành đối tượng DateTime trong Python?