2010-04-20 35 views
9

tôi có một câu hỏi nhanh. Tôi có một mảng 2D lưu trữ một thể hiện của một lớp. Các phần tử của mảng được gán một lớp cụ thể dựa trên một tệp văn bản được đọc trước đó trong chương trình. Vì tôi không biết mà không tìm trong tập tin lớp nào được lưu trữ tại một phần tử cụ thể, tôi có thể tham chiếu đến một trường không tồn tại ở chỉ mục đó (tham chiếu đến hình thức khi một thể hiện của temp được lưu trữ trong chỉ mục đó). tôi đã đưa ra một phương pháp thử nghiệm này, nhưng nó dài và đòi hỏi một ma trận thứ hai. Có một hàm để kiểm tra sự tồn tại của một trường trong một lớp không?Kiểm tra sự tồn tại của một trường trong một lớp

class temp(): 
    name = "default" 

class temp1(): 
    appearance = "@" 

Trả lời

3

Bạn đang tìm kiếm:

isinstance (object, classinfo)

Return true nếu đối tượng là một thể hiện của đối số classinfo, hoặc của một (trực tiếp hoặc gián tiếp) phân lớp của chúng. Cũng trả về true nếu classinfo là một đối tượng kiểu (lớp kiểu mới) và đối tượng là một đối tượng thuộc loại đó hoặc của một lớp con trực tiếp hoặc gián tiếp . Nếu đối tượng không phải là đối tượng lớp hoặc đối tượng thuộc loại nhất định, hàm luôn trả về sai. Nếu classinfo không phải là đối tượng kiểu hoặc đối tượng kiểu, nó có thể là một đối tượng lớp hoặc loại hoặc có thể đệ quy chứa các bộ dữ liệu khác (các loại trình tự khác không phải là được chấp nhận). Nếu classinfo không phải là loại loại, hoặc loại lớp học, loại và các bộ đó, một ngoại lệ TypeError được nêu ra.

Bất cứ điều gì bạn đang cố gắng làm dường như không phải là ý tưởng hay. Vui lòng mô tả nhu cầu ban đầu của bạn chi tiết hơn và chúng tôi sẽ giúp bạn đưa ra một thiết kế tốt hơn.

25

hasattr(x, 'foo') là một hàm nhị phân tích hợp để kiểm tra xem đối tượng x có thuộc tính x.foo (cho dù nó nhận được từ lớp hay không), có vẻ gần với những gì bạn đang yêu cầu. Cho dù những gì bạn đang yêu cầu thực sự là những gì bạn yêu cầu nên được hỏi là một vấn đề khác - như câu trả lời của @ Eli cho thấy, thiết kế của bạn có vẻ lạ. Tuy nhiên, điều này không trả lời câu hỏi của bạn theo yêu cầu ;-).

2

Bạn cũng có thể sử dụng xử lý ngoại lệ để thực hiện việc này.

try: 
    val = x.name 
except AttributeError: 
    val = x.appearance 
Các vấn đề liên quan