enum

python枚举的应用enum

霸气de小男生 提交于 2020-01-19 16:55:25
一、介绍 枚举类可以方便地表示星期,月份等常数类型,如果你不用枚举类,那么你只能用数字或者字符串。如果你使用数字,用1-7来表示星期数,但一个数字在程序中不仅可以表示星期数,可能还有其他许多含义,这样你在写程序时就必须时刻记住这些数字的含义,这降低了程序的可读性,也导致容易出错。而当你使用字符串时,虽然没有明显的缺点,但在内存中字符串所占内存要比数字多,这就降低了程序的效率。 枚举类正好弥补了这两方面的缺点,你可以在代码中使用枚举类,但在内存中存放时使用的是数字,既提高了可读性,又提高了程序效率。更重要的是,Python中的枚举类型是不可变类型,又可以进行迭代,这就意味着你可以随时使用枚举类型而不用担心改变了枚举类型的值 二、代码 from enum import Enum, unique #@unique #@unique装饰器可以帮助我们检查保证没有重复值 class Weekday(Enum): Sun = 0 # Sun的value被设定为0 Mon = 1 Tue = 2 Wed = 3 Thu = 4 Fri = 5 Sat = 6 Say = 6 #假设重复项 print(Weekday.Sun) #枚举类型 print(Weekday['Sun']) #枚举类型 print(Weekday.Sun.name) #枚举名称 print(Weekday.Sun

enum

老子叫甜甜 提交于 2020-01-19 06:56:48
由于枚举类型的实例是常量,因此按照命名惯例他们都用大写字母表示。(如果在一个名字中间有多个单词,用下划线将他们隔开)。 特性 枚举中所有的成员,必须出现在枚举对象的下面。 如果枚举类中有一个成员,那么枚举对象最后不能省略分号。 枚举中的构造方法必须私有。(也分为有参构造和无参构造) 抽象方法的意义:可以用来描述某个枚举成员的信息,提高程序的可读性。 可以在switch语句内使用。 枚举中常用的方法 String name() 返回枚举常量的名称,与其枚举声明中声明完全相同 int ordinal() 用来表示某个特定的enum常量的声明顺序。从0开始 static values():按照enum常量的声明顺序,产生有这些常量值构成的数组。 枚举类型的使用 public enum Weeked { MONDYA { //可以理解为是Weeked的一个实例对象 @Override public void desc ( ) { System . out . println ( "今天星期一" ) ; } } , TUESDAY ( "星期二" ) { @Override public void desc ( ) { System . out . println ( "今天星期二" ) ; } } , WEDNESDAY ( "星期三" ) { @Override public void

3_SQL注入攻击_1

眉间皱痕 提交于 2020-01-17 22:05:47
0x00 sql注入   在owasp的年度top10安全问题中,注入高居榜首。SQL注入攻击是指通过构建特殊的输入作为参数传入web应用程序,而这些输入大多都是SQL语法中的一些组合,通过执行SQL语句而执行攻击者所要的操作,其主要原因是程序没有细致的过滤用户输入的数据,致使非法数据侵入系统。 1.对web应用而言,用户的核心数据存储在数据库中,例如MySQL,SQL sever,oracle; 2.通过SQL注入攻击,可以获取,修改,删除数据库信息,并且通过提权来控制web服务器等其他操作; 3.SQL注入即攻击者通过构造特殊的SQL语句,入侵目标系统,致使后台数据库泄露数据的过程; 4.因为SQL注入漏洞造成的严重危害性所以,常年稳居owasp top10的榜首。 0x01 SQL注入的危害  1.脱库导致用户数据泄露;  2.危害web等应用的安全;  3.失去操作系统的控制权;  4.用户信息被非法买卖;  5.危害企业及国家的安全; 0x02 SQL基础知识回顾   环境:OWASP   表1:dvwa.user   表2:wordpress.wp_users   表3: mysql.user 登录 mysql -uroot -p root@owaspbwa:~# mysql -uroot -p Enter password: Welcome to the MySQL

java中enum类型的使用

僤鯓⒐⒋嵵緔 提交于 2020-01-17 05:06:52
java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java 中定义的常量值不采用enmu 枚举类型,而采用public final static 类型来定义呢?以前我们都是采用这种方式定义的,很少采用enum 定义,所以也都没有注意过,面对突入起来的问题,还真有点不太清楚为什么有这样的定义。既然不明白就抽时间研究下吧。 Java 中的枚举类型采用关键字enum 来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型。要了解枚举类型,建议大家先打开jdk 中的Enum 类简单读一下,这个类里面定义了很多protected 方法,比如构造函数,如果要使用这些方法我们可以把枚举类型定义到当前类中。每个枚举类型,都有自己的名字和顺序,当我们输出一个枚举类型的时候,会输入枚举类型的name ,具体可以参考下面的例子。 一、 通常定义常量方法 我们通常利用public final static 方法定义的代码如下,分别用1 表示红灯,3 表示绿灯,2 表示黄灯。 package com.csdn.myEnum; public class Light { /* 红灯 */ public final static int RED =1; /* 绿灯 */ public final static int GREEN =3; /* 黄灯 */

单例模式

我是研究僧i 提交于 2020-01-15 00:27:55
单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 注意: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 介绍 意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 主要解决: 一个全局使用的类频繁地创建与销毁。 何时使用: 当您想控制实例数目,节省系统资源的时候。 如何解决: 判断系统是否已经有这个单例,如果有则返回,如果没有则创建。 关键代码: 构造函数是私有的。 应用实例: 1、一个班级只有一个班主任。 2、Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。 3、一些设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。 优点: 1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。 2、避免对资源的多重占用(比如写文件操作)。 缺点:

C# 复杂变量类型——枚举(Enum)

China☆狼群 提交于 2020-01-14 08:39:20
除了简单的变量类型外,C# 还提供了三个较复杂的变量: 枚举、结构和数组 。 C# 枚举(Enum): 枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。 C# 枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承。 枚举类型是一种值类型,定义好的值会存放到栈中。 枚举类型在定义时使用 enum 关键字表示,枚举类型的定义与类成员的定义是一样的,或者直接定义在命名空间中。 注意:不能直接将枚举类型定义到方法中。 声明枚举的一般语法: 访问修饰符 enum 变量名 : 数据类型 { 值 1 , 值 2 , . . . 值n } 其中: <1>、访问修饰符 与类成员的访问修饰符一样,省略访问修饰符也是代表使用 private 修饰符的。 例如: public enum test { 男 = 0 , 女 = 1 } <2>、数据类型 枚举使用一个基本类型来存储。枚举类型可取的每个值都存储为该基本类型的一个值,默认情况下该类型为 int。 当然,也可以指定其他基本类型。 枚举的基本类型可以是:byte、sbyte、short、ushort、int、uint、long 和 ulong 例如: enum location : byte { north = 1 , south = 2 , east = 3 , west = 4 } <3>、值1,值2,…

Enum枚举

扶醉桌前 提交于 2020-01-13 04:53:52
枚举 没想到一个小小的枚举,也有这么深的知识。 为了获取枚举上一个废弃标识注解,找遍了百科,坑死我了。 还好公司有大佬,破了难题。很奇怪他是怎么知道用getField的。 --一路追踪,原来一开始想的都是内部类,怎么得到实例对象,一开始就偏了。 终于明白了。故记下本次学习历程。再次明白了关键字搜索的重要性。 1、枚举基本介绍 参考博文:-- https://www.iteye.com/blog/whitesock-728934 https://wenku.baidu.com/view/5ddd914fb307e87100f69603.html https://www.cnblogs.com/draem0507/p/4110987.html 1) Enum声明了name()方法和oridinal()方法,分别用于返回枚举值的名称和该枚举值在枚举类型中声明的顺序(从0开始)。 2)单例的实现 序列化过程中写入流的只有name ;反序列化过程中通过调用Enum.valueOf(Class<T> enumType, String name)静态方法构造枚举值,从而保证了枚举值的单例性。 3)ENUM$VALUES:是个private static final的数组。在枚举类初始化的时候,会实例化所有的枚举对象然后按顺序放在这个数组中 2、枚举的反射 参考博文:- https://blog

Java编程思想---枚举类型

孤街醉人 提交于 2020-01-13 00:16:28
Java编程思想—枚举类型 基本enum特性 调用enum的values()方法,可以遍历enum实例,values方法返回enum实例数组,而且该数组中的元素严格保持在enum中声明时的顺序 public enum Shrubbery { GROUND, CRAWLING, HANGING } public class EnumClass { public static void main(String[] args) { for (Shrubbery s : Shrubbery.values()) { // ordinal方法返回一个int值 这是每个enum实例在声明时的次序 从 0 开始 System.out.println(s + "orginal " + s.ordinal()); System.out.println("_________________"); // enum类实现了Comparable接口 所以具有compareTo方法 System.out.println(s.compareTo(Shrubbery.CRAWLING ) + ""); System.out.println("_________________"); // 可以用 == 来比较enum实例 编译器会自动提供equal和hashcode方法 System.out.println(s =

枚举类型与位域枚举Enum

女生的网名这么多〃 提交于 2020-01-09 10:00:06
一、概述 定义一个值类型,其中包含固定值集合。枚举类型变量可以是此集合中的任意一个或多个值。 枚举使用enum关键字来声明,与类同级。 枚举本身可以有修饰符,但枚举的成员始终是公共的,不能有访问修饰符。枚举本身的修饰符仅能使用public和internal。 二、常数枚举 1、定义枚举类型 显式指定枚举的底层数据类型,如果没有明确指定底层数据类型则默认的数据类型是int类型。 enum sex : byte //显示指定枚举的底层数据类型 { male, female, //此逗号可以省略 };       //此分号可以省略 显式设置枚举的成员常量值,默认是从0开始,逐个递增的。但是以下例子却设置成了1,2,3,40,1。而且成员值可以一样的。 void Main() { Console.WriteLine((int)Week.Monday); //获取值 } enum Week { Monday = 1, Tuesday = 2, Wednesday = 3, Sunday = 0, Everyday = 1 //成员的值可以设置成一样的,但是成员不行 } 2、声明枚举变量并初始化 Color myColor=Color.White; Color myColor=(Color)1;//由值转成枚举成员 Color myColor=(Color)Enum.Parse(typeof

Java枚举enum

不羁的心 提交于 2020-01-08 09:23:31
1.普通枚举 public class EnumTest01 { /** *普通枚举 */ public enum Fruit { APPLE, BANANA, PEAR, CHERRY; } public static void main(String[] args) { //遍历 for (Fruit f : Fruit.values()) { System.out.println(f); } Fruit f = Fruit.APPLE; //结合switch switch (f) { case APPLE: System.out.println("APPLE"); break; case BANANA: System.out.println("BANANA"); break; case PEAR: System.out.println("PEAR"); break; case CHERRY: System.out.println("CHERRY"); break; default: System.out.println("UNKNOW FRUIT"); break; } } } View Code 2.带构造方法,普通方法,静态方法,成员变量,重写toString()方法 package com.jte.enum1; public class EnumTest01 { /**