
Đọc toàn bộ thuộc tính của một đối tượng thành dict và hiển thị theo kiểu dữ liệu
#Python#Attribute1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Hầu hết script kiểm tra cần đọc hết thuộc tính của part rồi mới quyết định. Hàm đọc chung trả về dict tên -> giá trị Python đã đúng kiểu, dễ so sánh và ghi báo cáo.
Đọc toàn bộ thuộc tính của một đối tượng…Các bước thực hiện
- Gọi GetUserAttributes. Trả về mảng AttributeInformation.
- Chuyển theo kiểu. Integer, Real, Boolean, Time, String, Reference.
- Gom thành dict. Khóa là Title.
- Bỏ thuộc tính kế thừa. Tùy chọn lọc Inherited.
- In có thứ tự. Sắp xếp theo tên.
Code tham khảo (Python)
import NXOpen KIEU = NXOpen.NXObject.AttributeType def gia_tri(a): if a.Type == KIEU.Integer: return a.IntegerValue if a.Type == KIEU.Real: return a.RealValue if a.Type == KIEU.Boolean: return a.BooleanValue if a.Type == KIEU.Time: return a.TimeValue if a.Type == KIEU.Reference: return a.ReferenceValue return a.StringValue def doc_thuoc_tinh(doi_tuong, bo_ke_thua=False): kq = {} for a in doi_tuong.GetUserAttributes(): if bo_ke_thua and a.Inherited: continue kq[a.Title] = gia_tri(a) return kq def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Work if part is None: return tt = doc_thuoc_tinh(part) lw.WriteLine("Part %s có %d thuộc tính" % (part.Leaf, len(tt))) for ten in sorted(tt): lw.WriteLine(" %-24s %-14s %r" % (ten, type(tt[ten]).__name__, tt[ten])) if __name__ == "__main__": main()Giải thích code
- Một lần gọi
GetUserAttributes()nhanh hơn gọiHasUserAttribute/Get...cho từng tên. a.Inheritedđúng với thuộc tính kế thừa từ đối tượng cha (ví dụ từ part gốc sang occurrence).%rin giá trị dạng biểu diễn Python, giúp phân biệt'5'với5.
Lỗi thường gặp
- Thuộc tính mảng trả về nhiều phần tử cùng
Title; hàm trên giữ phần tử cuối. Xử lý mảng riêng ở bài sau. - Thuộc tính chưa có giá trị chỉ xuất hiện khi gọi bản
GetUserAttributes(True).
Code mang tính tham khảo, viết cho NX 12 trở lên (Python journal). Tên menu và một số lớp có thể khác theo phiên bản NX; hãy chạy thử trên bản sao của chi tiết trước khi dùng cho dữ liệu thật.
Điểm: 0
Trả lời
Đăng nhập để tham gia thảo luận.