Giả sử bạn phải tạo 10 đối tượng lớp trong Python và làm điều gì đó với chúng, như:
obj_1 = MyClass[]
other_object.add[obj_1]
obj_2 = MyClass[]
other_object.add[obj_2]
.
.
.
obj_10 = MyClass[]
other_object.add[obj_10]
Làm thế nào bạn sẽ làm điều đó với một vòng lặp và gán một biến cho mỗi đối tượng [như
obj_1.do_sth[]
2], để mã sẽ ngắn hơn? Mỗi đối tượng phải được truy cập bên ngoài vòng lặpobj_1.do_sth[]
Đã hỏi ngày 6 tháng 2 năm 2014 lúc 9:34Feb 6, 2014 at 9:34
Alwbtcalwbtcalwbtc
26.7K59 Huy hiệu vàng129 Huy hiệu bạc185 Huy hiệu Đồng59 gold badges129 silver badges185 bronze badges
1
Câu hỏi này được hỏi mỗi ngày trong một số biến thể. Câu trả lời là: Giữ dữ liệu của bạn ra khỏi tên biến của bạn và đây là bài đăng trên blog bắt buộc.
Trong trường hợp này, tại sao không lập một danh sách các OBJ?
objs = [MyClass[] for i in range[10]]
for obj in objs:
other_object.add[obj]
objs[0].do_sth[]
Đã trả lời ngày 6 tháng 2 năm 2014 lúc 9:39Feb 6, 2014 at 9:39
REMCOGERLICHREMCOGERLICHRemcoGerlich
29,7K5 Huy hiệu vàng63 Huy hiệu bạc78 Huy hiệu Đồng5 gold badges63 silver badges78 bronze badges
2
Bạn có thể sử dụng danh sách để xác định nó.
objs = list[]
for i in range[10]:
objs.append[MyClass[]]
Đã trả lời ngày 6 tháng 2 năm 2014 lúc 9:40Feb 6, 2014 at 9:40
3
Tạo một từ điển như nó đã đề cập, nhưng trong trường hợp này, mỗi khóa có tên của tên đối tượng mà bạn muốn tạo. Sau đó, giá trị được đặt làm lớp bạn muốn khởi tạo, xem ví dụ:
class MyClass:
def __init__[self, name]:
self.name = name
self.checkme = 'awesome {}'.format[self.name]
...
instanceNames = ['red', 'green', 'blue']
# Here you use the dictionary
holder = {name: MyClass[name=name] for name in instanceNames}
Sau đó, bạn chỉ cần gọi phím chủ và bạn sẽ có tất cả các thuộc tính và phương thức của lớp bạn có sẵn cho bạn.
holder['red'].checkme
output:
'awesome red'
Đã trả lời ngày 18 tháng 1 năm 2017 lúc 13:11Jan 18, 2017 at 13:11
JobeljobelJobel
6136 Huy hiệu bạc12 Huy hiệu Đồng6 silver badges12 bronze badges
0
Sử dụng từ điển cho các tên duy nhất mà không có danh sách tên:
class MyClass:
def __init__[self, name]:
self.name = name
self.pretty_print_name[]
def pretty_print_name[self]:
print["This object's name is {}.".format[self.name]]
my_objects = {}
for i in range[1,11]:
name = 'obj_{}'.format[i]
my_objects[name] = my_objects.get[name, MyClass[name = name]]
Output:
"This object's name is obj_1."
"This object's name is obj_2."
"This object's name is obj_3."
"This object's name is obj_4."
"This object's name is obj_5."
"This object's name is obj_6."
"This object's name is obj_7."
"This object's name is obj_8."
"This object's name is obj_9."
"This object's name is obj_10."
Đã trả lời ngày 29 tháng 5 năm 2020 lúc 2:35May 29, 2020 at 2:35
Tôi hy vọng đây là thứ bạn đang tìm kiếm.
class Try:
def do_somthing[self]:
print 'Hello'
if __name__ == '__main__':
obj_list = []
for obj in range[10]:
obj = Try[]
obj_list.append[obj]
obj_list[0].do_somthing[]
Output:
obj_1.do_sth[]
0Đã trả lời ngày 6 tháng 2 năm 2014 lúc 9:45Feb 6, 2014 at 9:45
Tanveer Alamtanveer AlamTanveer Alam
5.0573 Huy hiệu vàng20 Huy hiệu bạc42 Huy hiệu đồng3 gold badges20 silver badges42 bronze badges
2
Cho đến nay, chúng tôi đã xác định một lớp, xây dựng một đối tượng duy nhất, sử dụng đối tượng đó, và sau đó ném đối tượng đi. Tuy nhiên, sức mạnh thực sự trong lập trình hướng đối tượng xảy ra khi chúng ta xây dựng nhiều trường hợp của lớp. Khi chúng ta xây dựng nhiều đối tượng từ lớp của chúng ta, chúng ta có thể muốn thiết lập các giá trị ban đầu khác nhau cho từng đối tượng. Chúng ta có thể chuyển dữ liệu cho các hàm tạo để cung cấp cho mỗi đối tượng một giá trị ban đầu khác nhau: Hoạt động: Codelens 16.9.1 [Partyanimal_multipleinstances] Hàm tạo có cả tham số
3 trỏ đến thể hiện đối tượng và các tham số bổ sung được chuyển vào hàm tạo khi đối tượng được xây dựng:obj_1.do_sth[]
Trong hàm tạo, dòng thứ hai sao chép tham số [
obj_1.do_sth[]
4] được chuyển vào thuộc tính obj_1.do_sth[]
5 trong thể hiện đối tượng.Đầu ra của chương trình cho thấy rằng mỗi đối tượng [
obj_1.do_sth[]
6 và obj_1.do_sth[]
7] chứa các bản sao độc lập của riêng chúng là obj_1.do_sth[]
8 và obj_1.do_sth[]
4:obj_1.do_sth[]
1Q-2: Khi sử dụng nhiều phiên bản, chúng ta có thể đặt các giá trị ban đầu khác nhau cho các phiên bản bằng cách sử dụng a.
Bạn đã thử các hoạt động trên trang này of activities on this page