Python enum với giá trị đối tượng

Kiểu enum là kiểu dữ liệu đặc biệt cho phép một biến trở thành một tập hợp các hằng số được xác định trước. Biến phải bằng một trong các giá trị đã được xác định trước cho nó. Các ví dụ phổ biến bao gồm hướng la bàn (giá trị BẮC, NAM, ĐÔNG và TÂY) và các ngày trong tuần

Vì chúng là hằng số nên tên của các trường thuộc kiểu enum được viết hoa

Trong ngôn ngữ lập trình Java, bạn định nghĩa một kiểu enum bằng cách sử dụng từ khóa enum. Ví dụ: bạn sẽ chỉ định loại enum ngày trong tuần là

public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY 
}

Bạn nên sử dụng các kiểu enum bất cứ khi nào bạn cần biểu diễn một tập hợp cố định các hằng số. Điều đó bao gồm các loại enum tự nhiên chẳng hạn như các hành tinh trong hệ mặt trời của chúng ta và các tập dữ liệu nơi bạn biết tất cả các giá trị có thể có tại thời điểm biên dịch—ví dụ: các lựa chọn trên menu, cờ dòng lệnh, v.v.

Đây là một số mã chỉ cho bạn cách sử dụng Day enum được xác định ở trên

public class EnumTest {
    Day day;
    
    public EnumTest(Day day) {
        this.day = day;
    }
    
    public void tellItLikeItIs() {
        switch (day) {
            case MONDAY:
                System.out.println("Mondays are bad.");
                break;
                    
            case FRIDAY:
                System.out.println("Fridays are better.");
                break;
                         
            case SATURDAY: case SUNDAY:
                System.out.println("Weekends are best.");
                break;
                        
            default:
                System.out.println("Midweek days are so-so.");
                break;
        }
    }
    
    public static void main(String[] args) {
        EnumTest firstDay = new EnumTest(Day.MONDAY);
        firstDay.tellItLikeItIs();
        EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);
        thirdDay.tellItLikeItIs();
        EnumTest fifthDay = new EnumTest(Day.FRIDAY);
        fifthDay.tellItLikeItIs();
        EnumTest sixthDay = new EnumTest(Day.SATURDAY);
        sixthDay.tellItLikeItIs();
        EnumTest seventhDay = new EnumTest(Day.SUNDAY);
        seventhDay.tellItLikeItIs();
    }
}

đầu ra là

Mondays are bad.
Midweek days are so-so.
Fridays are better.
Weekends are best.
Weekends are best.

Các loại enum của ngôn ngữ lập trình Java mạnh hơn nhiều so với các đối tác của chúng trong các ngôn ngữ khác. Khai báo enum định nghĩa một lớp (được gọi là kiểu enum). Phần thân của lớp enum có thể bao gồm các phương thức và các trường khác. Trình biên dịch tự động thêm một số phương thức đặc biệt khi nó tạo một enum. Ví dụ: họ có một phương thức tĩnh values trả về một mảng chứa tất cả các giá trị của enum theo thứ tự chúng được khai báo. Phương thức này thường được sử dụng kết hợp với cấu trúc for-each để lặp lại các giá trị của một kiểu enum. Ví dụ: mã này từ ví dụ lớp

public class EnumTest {
    Day day;
    
    public EnumTest(Day day) {
        this.day = day;
    }
    
    public void tellItLikeItIs() {
        switch (day) {
            case MONDAY:
                System.out.println("Mondays are bad.");
                break;
                    
            case FRIDAY:
                System.out.println("Fridays are better.");
                break;
                         
            case SATURDAY: case SUNDAY:
                System.out.println("Weekends are best.");
                break;
                        
            default:
                System.out.println("Midweek days are so-so.");
                break;
        }
    }
    
    public static void main(String[] args) {
        EnumTest firstDay = new EnumTest(Day.MONDAY);
        firstDay.tellItLikeItIs();
        EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);
        thirdDay.tellItLikeItIs();
        EnumTest fifthDay = new EnumTest(Day.FRIDAY);
        fifthDay.tellItLikeItIs();
        EnumTest sixthDay = new EnumTest(Day.SATURDAY);
        sixthDay.tellItLikeItIs();
        EnumTest seventhDay = new EnumTest(Day.SUNDAY);
        seventhDay.tellItLikeItIs();
    }
}
0 bên dưới lặp lại trên tất cả các hành tinh trong hệ mặt trời

for (Planet p : Planet.values()) {
    System.out.printf("Your weight on %s is %f%n",
                      p, p.surfaceWeight(mass));
}

Trong ví dụ sau,

public class EnumTest {
    Day day;
    
    public EnumTest(Day day) {
        this.day = day;
    }
    
    public void tellItLikeItIs() {
        switch (day) {
            case MONDAY:
                System.out.println("Mondays are bad.");
                break;
                    
            case FRIDAY:
                System.out.println("Fridays are better.");
                break;
                         
            case SATURDAY: case SUNDAY:
                System.out.println("Weekends are best.");
                break;
                        
            default:
                System.out.println("Midweek days are so-so.");
                break;
        }
    }
    
    public static void main(String[] args) {
        EnumTest firstDay = new EnumTest(Day.MONDAY);
        firstDay.tellItLikeItIs();
        EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);
        thirdDay.tellItLikeItIs();
        EnumTest fifthDay = new EnumTest(Day.FRIDAY);
        fifthDay.tellItLikeItIs();
        EnumTest sixthDay = new EnumTest(Day.SATURDAY);
        sixthDay.tellItLikeItIs();
        EnumTest seventhDay = new EnumTest(Day.SUNDAY);
        seventhDay.tellItLikeItIs();
    }
}
0 là một kiểu enum đại diện cho các hành tinh trong hệ mặt trời. Chúng được xác định với các thuộc tính khối lượng và bán kính không đổi

Mỗi hằng số enum được khai báo với các giá trị cho tham số khối lượng và bán kính. Các giá trị này được chuyển đến hàm tạo khi hằng số được tạo. Java yêu cầu các hằng số phải được xác định trước, trước bất kỳ trường hoặc phương thức nào. Ngoài ra, khi có các trường và phương thức, danh sách hằng số enum phải kết thúc bằng dấu chấm phẩy


Ghi chú. Hàm tạo cho một loại enum phải là gói riêng tư hoặc truy cập riêng tư. Nó tự động tạo các hằng được định nghĩa ở đầu phần thân enum. Bạn không thể tự mình gọi một hàm tạo enum

Ngoài các thuộc tính và hàm tạo của nó,

public class EnumTest {
    Day day;
    
    public EnumTest(Day day) {
        this.day = day;
    }
    
    public void tellItLikeItIs() {
        switch (day) {
            case MONDAY:
                System.out.println("Mondays are bad.");
                break;
                    
            case FRIDAY:
                System.out.println("Fridays are better.");
                break;
                         
            case SATURDAY: case SUNDAY:
                System.out.println("Weekends are best.");
                break;
                        
            default:
                System.out.println("Midweek days are so-so.");
                break;
        }
    }
    
    public static void main(String[] args) {
        EnumTest firstDay = new EnumTest(Day.MONDAY);
        firstDay.tellItLikeItIs();
        EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);
        thirdDay.tellItLikeItIs();
        EnumTest fifthDay = new EnumTest(Day.FRIDAY);
        fifthDay.tellItLikeItIs();
        EnumTest sixthDay = new EnumTest(Day.SATURDAY);
        sixthDay.tellItLikeItIs();
        EnumTest seventhDay = new EnumTest(Day.SUNDAY);
        seventhDay.tellItLikeItIs();
    }
}
0 còn có các phương thức cho phép bạn truy xuất lực hấp dẫn bề mặt và trọng lượng của một vật thể trên mỗi hành tinh. Đây là một chương trình mẫu lấy trọng lượng của bạn trên trái đất (theo bất kỳ đơn vị nào) và tính toán và in ra trọng lượng của bạn trên tất cả các hành tinh (trong cùng một đơn vị)

Một enum có thể là một đối tượng?

Bởi vì enum về mặt kỹ thuật là một lớp, nên các giá trị enum về mặt kỹ thuật là các đối tượng . Là các đối tượng, chúng có thể chứa các chương trình con. Một trong các chương trình con trong mỗi giá trị enum được đặt tên là ordinal(). Khi được sử dụng với một giá trị enum, nó trả về số thứ tự của giá trị trong danh sách các giá trị của enum.

auto() trong Python là gì?

Mô-đun enum của Python cung cấp một chức năng tiện lợi gọi là auto() cho phép bạn đặt các giá trị tự động cho các thành viên enum của mình . Hành vi mặc định của hàm này là gán các giá trị số nguyên liên tiếp cho các thành viên.

Enum có thể có nhiều giá trị không?

Hàm tạo Enum có thể chấp nhận nhiều giá trị .

Làm cách nào để đặt enum trong Python?

Việc liệt kê trong Python được triển khai bằng cách sử dụng mô-đun có tên “enum“. Bảng liệt kê được tạo bằng cách sử dụng các lớp. .
Enums có thể được hiển thị dưới dạng chuỗi hoặc repr
Enums có thể được kiểm tra các loại của chúng bằng cách sử dụng type()
Từ khóa “tên” được sử dụng để hiển thị tên của thành viên enum