2012-07-06 28 views
10

Tôi chỉ đang học lập trình và đang học Python như ngôn ngữ đầu tiên của mình. Như một bài tập tôi đang cố gắng viết một chương trình sổ địa chỉ. Liên hệ mới được tạo bởi người dùng bằng dấu nhắc lệnh. Các liên hệ mới là các cá thể đối tượng của lớp Liên hệ.Tạo các biến được đặt tên động từ đầu vào của người dùng

Tôi biết cách khởi tạo đối tượng lớp từ bên trong mã, nhưng làm cách nào để tạo một đối tượng có tên biến dựa trên đầu vào của người dùng? Nói rằng tôi nhắc người dùng cho một tên - làm cách nào để lấy thông tin đó và sử dụng nó cho tên biến của đối tượng mới của tôi?

Cảm ơn !!

+0

Chúng tôi vui mừng để giúp đỡ, nhưng bạn thực sự cần gửi một số mã (những gì bạn đã cố gắng) để chúng tôi có thể hướng dẫn bạn tốt hơn – inspectorG4dget

Trả lời

19

Từ nhận xét, hóa ra bạn đang hỏi về một thứ được yêu cầu nhiều lần tại đây. "Làm thế nào tôi có thể tạo các biến được đặt tên động".

Trả lời: Đừng làm điều này. Rất có thể có những cách tốt hơn để giải quyết vấn đề.

Giải thích:

Nếu bạn đã tạo ra các biến động được đặt tên, bạn hoàn toàn không có một xử lý tốt đối với họ khi chúng được tạo ra. Chắc chắn có nhiều cách để kiểm tra các hình cầu và phạm vi địa phương để xem những gì đang có. Nhưng thực tế là bạn nên có quyền kiểm soát dứt khoát về những gì đang được tạo ra.

Những gì bạn cần làm là đặt chúng vào một cuốn từ điển:

people = {} 
name = raw_input("What name? ") # "person" 
people[name] = User(name) 

print people 
# {'person': <User: "person">} 

print people.keys() 
# ['person'] 

Bằng cách này bạn không tạo ra các biến tùy ý trong không gian tên của bạn. Bây giờ bạn có một từ điển các khóa và các đối tượng làm giá trị. Nó cũng là một loại sâu để cho phép đầu vào do người dùng cung cấp để điều khiển việc đặt tên biến.

Để biết thêm thông tin, chỉ cần tìm kiếm ở đây cho cùng một chủ đề và xem nhiều ví dụ về lý do bạn không nên làm điều này. Không có vấn đề gì ví dụ bạn thấy cho bạn thấy làm thế nào để sử dụng globals(), vv, xin vui lòng tham khảo ý kiến ​​của tôi và không đi theo con đường đó. Yêu và tận hưởng .. và có thể ôm và hôn, từ điển của bạn.

Tài liệu tham khảo:

+0

Thanks for the help! Có lẽ tôi không đủ chính xác với câu hỏi của tôi. Tôi biết cách gán các giá trị cho các trường của một đối tượng dựa trên đầu vào của người dùng, nhưng về tên thực tế của đối tượng thì sao? – ShaunSoda

+0

Có, bạn cần phải chi tiết hơn nhiều khi bạn yêu cầu trợ giúp tại đây. Bạn đang nói về sự thể hiện của cá thể khi bạn in đối tượng? Bạn có ý nghĩa gì với "tên" của đối tượng? – jdi

+0

Hehe. Xin lỗi, như tôi đã nói tôi chỉ học chương trình với tôi theo các điều khoản. Khi bạn tạo một đối tượng lớp mới, bạn đặt tên cho nó. Lớp của tôi được gọi là Danh bạ, vì vậy nếu tôi tạo các đối tượng mới, chúng có thể được gọi là contact1, contact2, v.v. Có thể chúng được gọi là số nhận dạng? Tôi muốn đặt tên cho định danh của từng đối tượng bất kể người dùng nhập gì. – ShaunSoda

0

Bạn không nói rõ lý do tại sao bạn sẽ muốn nhanh chóng đối tượng trong đó tên được xác định như thời gian chạy như bạn muốn. Điều quan trọng là nhận ra rằng đó không phải là thực tế phổ biến.

Có thể, tuy nhiên, bằng cách sử dụng được xây dựng trong setattr:

setattr(someobject, name, user) 

sử dụng Hơi bình thường hơn sẽ được sử dụng một cuốn từ điển. Vì vậy, nếu bạn có nhiều cá thể người dùng và muốn lưu trữ chúng, bạn có thể lưu trữ chúng trong từ điển như dưới đây. Điều này sẽ cho phép bạn tham chiếu đối tượng theo tên.sản lượng

class User(object): 

    def __init__(self, name): 
     self.name = name 


users = {} 

name = raw_input("What name?") 
users[name] = User(name) 


print users 
print users['Andre'].name 

mẫu:

What name?Andre 
{'Andre': <__main__.User object at 0x7f6b418a8710>} 
Andre 
+0

Thật không may, điều này đã không phải là những gì OP muốn. Tôi đã cung cấp câu trả lời này và sau đó phải thay đổi nó. – jdi

+0

barf. cũng quan trọng là những gì người khác sẽ học hỏi từ ngại về câu hỏi này. –

+0

Cảm ơn bạn rất nhiều! Có ý nghĩa! – ShaunSoda

Các vấn đề liên quan