首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python使用枚举

开发中我们经常定义常量, 其实有更好方法:为这样枚举类型定义一个class类型,然后,每个常量都是class一个唯一实例。...Python中提供了Enum来实现这个功能: from enum import Enum Numbers = Enum('Name', ('乔峰', '鸠摩智', '段誉', '阿紫', '虚竹',....段誉 , 3 阿紫 => Name.阿紫 , 4 虚竹 => Name.虚竹 , 5 慕容复 => Name.慕容复 , 6 6 Name.虚竹 Name.鸠摩智 上面我们就获得了Numbers类型枚举...,可以直接使用: Numbers.乔峰 来引用一个常量,或者枚举所有成员。...value属性则是自动赋给成员int常量,默认从1开始计数。 可见,我们既可以用成员名称引用枚举常量,又可以直接根据value值获得枚举常量。

45710
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Python 5.5 使用

    使用 type() 动态语言和静态语言最大不同,就是函数和定义,不是编译时创建,而是运行时动态创建。...metaclass直接译为,简单解释: 当我们定义了之后,就可以根据这个创建实例,所以,先定义,在创建实例。 先定义metaclass,就可以创建,最后创建实例。...所以,metaclass允许你创建修改。换句话说,你可以把看作是metaclass创建出来“实例”。 metaclass是Python面向对象里最难理解,也是最难使用魔法代码。...因为有表名,属性到字段映射和属性值集合,就可以构造出INSERT语句。...我们就通过metaclass创建了一个精简ORM框架。 小结: metaclass是Python中非常具有魔术性对象,它可以改变创建时行为,这种强大功能使用起来务必小心。

    50520

    Java 中枚举使用

    在日常写项目时,很多数据字典常量都需要定义和使用,同时在 Java 面试中,枚举也是一个绕不开的话题,这篇文章就来详细介绍一下枚举定义以及使用。 01  【什么是枚举?】...枚举定义就是指将变量值一一列出来,变量值只限于列举出来范围内,使用枚举可以很方便地定义数据常量、以及我们使用。 02  【为什么需要枚举?】...我们调试时候,最初将“男”输出,结果为1。因此,我们必须在前面寻找0含义。 尤其是当我们查看其他人代码时会看不懂。而定义枚举里面进行详细说明的话就能清楚得知含义。 (2)代码更优雅。...使用时,只需封装内部数据类型并限制数据字段。 此外,还可以为不同枚举变量调用不同处理方法(这可以通过实现枚举抽象方法来实现)。...03  【枚举定义和使用】 下面就定义一个试题类型枚举来帮助大家理解:

    1.6K20

    使用Python构造函数和析构函数

    1、问题背景当使用Python时,可以使用构造函数和析构函数来初始化和清理实例。构造函数在创建实例时自动调用,而析构函数在删除实例时自动调用。...在上面的代码示例中,Person具有一个构造函数__init__和一个析构函数__del__。...构造函数__init__在Person实例被创建时被调用,它将实例name属性设置为传入参数,并将实例的人口计数population加1。...具有__del__意味着垃圾回收器放弃检测和清理任何循环链接,例如丢失对链表最后一个引用。您可以从gc.garbage中获取被忽略对象列表。您有时可以使用弱引用来完全避免循环。...del__函数可以作弊,保存对对象引用,并停止垃圾回收。在__del__中显式引发异常会被忽略。del__更类似于__new,而非__init,这可能会令人困惑。

    18810

    构造Python常量

    构建常量 Python中不存在像const那样常量关键字,只是在内建空间中提供了一小部分常量,比如True、False、None等。那么在Python中如何使用常量呢?...一般来说有如下两种方法: 通过命名风格来提示使用者该变量代表意义为常量,比如MAX_NUMBER、TOTAL。...然而这种方式并没有真正实现常量,其对应值仍然可以被改变,这只是一种约定俗成风格。 通过自定义实现常量功能。这要求符合“命名全部为大写”和“值一旦被绑定便不可再修改”这两个条件。...__dict__[name] = value import sys sys.modules[__name__] = _const() 如果上面的代码对应模块名为const,使用时候只要import...---- 将常量集中到一个文件 无论采用那种方式实现常量,都建议将常量集中到一个文件中,因为这样有利于维护,一旦修改常量值,可以集中统一进行而不是逐个进行检查。

    3.3K20

    Swift 构造使用

    注: 我们在这篇博客中提到构造器都为构造器, 在这里不提及值构造使用,详见文档. 刚刚使用这个构造时候我感觉到很困惑啊, 不就是个 init, 你给我搞这么多事情干什么?...每个应该只有少量指定构造器, 大多数只有一个指定构造器, 我们使用 Swift 做 iOS 开发时就会用到很多 UIKit 框架指定构造器, 比如说: Swift 复制代码 init()init...Swift 编译器会对初始化方法进行安全地检查已保证实例初始化可以被安全正确执行: 指定构造器必须要确保所有被中提到属性在代理向上调用父指定构造器前被初始化, 之后才能将其它构造任务代理给父构造器...最终, 任意构造器链中便利构造器可以有机会定制实例和使用 self 父指定构造器定制实例属性 (可能). 子类中指定构造器定制实例属性....跟 ObjC 不同, Swift 中子类默认不会继承来自父所有构造器. 这样可以防止错误继承并使用构造器生成错误实例(可能导致子类中属性没有被赋值而正确初始化).

    1.7K20

    探寻Python鼻祖——

    这就是当你使用关键字 class 时 Python 在幕后做事情,就是通过来实现。...到底什么是(终于到主题了) 就是用来创建【东西】。你创建就是为了创建实例对象,不是吗?但是我们已经学习到了Python也是对象。...就是用来创建这些(对象)就是,你可以这样理解为: MyClass = MetaClass() # 使用创建出一个对象,这个对象称为“” my_object = MyClass(...答案就是:可以创建一个东西。那么什么可以用来创建一个呢?type,或者任何使用到type或者子类化type都可以。 8. 自定义 主要目的就是为了当创建时能够自动地改变。...但就本身而言,它们其实是很简单: 拦截创建 修改 返回修改之后 究竟为什么要使用? 现在回到我们大主题上来,究竟是为什么你会去使用这样一种容易出错且晦涩特性?

    84810

    GO-结构体(类似python)

    struct { name string //属性名,数据类型 age int //如果两个属性数据类型一样可以name,age int } //他有两个属性不一定要两个属性都进行赋值...//位置进行传参{"you",11} //但是位置传参必须所有属性都传进去 sb1 :=Sb{name:"you",age:11} //属性名:属性值...结构体.属性 fmt.Println(a.id)//如果没有重名属性名会提升 //fmt.Println(a.Hobby.id)你同样也可以这样获取 } /* 个人理解可以把它理解成python...中继承,比如A继承B type B struct {int} type A struct {B} 但是也有不同之处,他两个名字一样可以共存,而python中不行 */ 五.结构体为方法参数且修改结构体属性..."fmt" type Person struct { name string } func ChangeName(p *Person,NewName string){ //如果不是改变原来只传值可以穿结构体对象

    1.3K20

    探寻Python鼻祖——

    这就是当你使用关键字 class 时 Python 在幕后做事情,就是通过来实现。...到底什么是(终于到主题了) 就是用来创建【东西】。你创建就是为了创建实例对象,不是吗?但是我们已经学习到了Python也是对象。...就是用来创建这些(对象)就是,你可以这样理解为: MyClass = MetaClass() # 使用创建出一个对象,这个对象称为“” my_object = MyClass(...答案就是:可以创建一个东西。那么什么可以用来创建一个呢?type,或者任何使用到type或者子类化type都可以。 8. 自定义 主要目的就是为了当创建时能够自动地改变。...但就本身而言,它们其实是很简单: 拦截创建 修改 返回修改之后 究竟为什么要使用? 现在回到我们大主题上来,究竟是为什么你会去使用这样一种容易出错且晦涩特性?

    92100

    Python

    Python一切皆对象,所以也是对象。 我们知道,对象是通过实例化创建出来。但我们创建时并没有进行实例化操作,为什么也是对象呢? 既然是对象,肯定是另外某个实例。...这说明在我们使用class声明一个时候Python解释器为我们做了些什么。 一、介绍 通过一个,可以创建无数个实例对象,就相当于一个生产实例对象机器,可以不断生产出实例对象。...在Python中,是通过来创建就是用来创建,如果类是一个机器,那么就是可以生产机器机器。...注意,这里说是所有,自定义,内置,还有Python标准库中一些我们不会直接使用其他,就连最基object也是,同时,Python为了避免无限回溯,创建type自己也是type。...五、不要轻易自定义 框架和库会使用协助程序员执行很多任务,例如:验证属性、一次把装饰器依附到多个方法上、序列化对象或转换数据、对象关系映射、基于对象持久存储、动态转换使用其他语言编写结构。

    59720

    Python中type使用理解

    就是深度魔法,99%用户应该根本不必为此操心。如果你想搞清楚究竟是否需要用到,那么你就不需要它。...如下,使用type()函数查看对象所属类型。我们可以看到Python中所以实例都是对象。那么呢,既然一切都是对象,那么也应该是对象。...本质class创建本质就是用type创建。所以可以说python中所有都是type创建。 4.对理解与注意事项       就是python中函数type实际上是一个。...type就是Python在背后用来创建所有Python中所有的东西——都是对象。这包括整数、字符串、函数以及。它们全部都是对象,而且它们都是从一个创建而来,这个就是type。...type就是Python内建元,当然了,也可以创建自己。 1.python查看对象所属类型既可以用type函数,也可以用对象自带__class__属性。

    1K10

    Python

    这种方式所定义在可扩展性和可读性都超过了直接使用 type(name, bases, dict) 形式。...__new__(cls, name, bases, attrs) 在 9.4 节介绍过构造方法 __new__() ,不仅可以用在定义普通中,也可以用在中,其作用依然是“构造”所在结构,...我们知道,实例化第一步就是调用构造方法生成实例(详见9.4.1节),这也适用于实例化得到“普通”过程—— Foo 就是 AuthorMeta 实例。...并且,在 AuthorMeta 构造方法 __new__() 中定义属性 __author__ 已经成为了实例 Python 类属性——正是我们所希望中定义了更通用对象,它们应该“...理解了上述内容,就可以在中重写 __call__() ,用以实现单例(参阅9.4.2节,这里不使用构造方法 __new__() )。

    63920

    【Groovy】MOP 对象协议与编程 ( 方法注入 | 使用 MetaClass 进行方法注入构造方法 )

    文章目录 一、使用 MetaClass 注入构造方法 二、完整代码示例 一、使用 MetaClass 注入构造方法 ---- 使用 MetaClass 注入构造方法 , 代码格式为 : 被注入构造方法....metaClass.constructor = { 闭包 } 为如下 Student , 注入构造函数 , 传入 String 类型参数 , 赋值给 name 成员 ; class Student...(name: str) } 注意 , 构造函数返回值必须是 Student 对象 ; 这里在注入构造函数闭包中 , 可以设置若干构造函数参数 , 上述代码中 , 就为构造函数设置了 String 类型参数...; 使用上述注入构造函数 , 实例化 Student 对象 , 调用 hello 方法 , 可以成功打印出构造函数中传入 “Tom” 参数 ; // 使用注入构造方法初始化 Student ...constructor Student.metaClass.constructor = { String str -> new Student(name: str) } // 使用注入构造方法初始化

    21720

    python 通过控制创建

    在上面这张图中,A是我们平常在python中写,它可以创建一个对象a。...其实A这个也是一个对象,它是type对象,可以说type是用来创建对象,我们平常写都是type创建对象,再由创建对象再去创建我们平常使用对象,我们可以看看type官方文档...我们已经知道,也是对象,那么我们在创建时候,可不可以控制创建过程?当然是可以,这就是编程。 三、如何实现编程? 1....a = A() # 输出 MetaClass __new__ MetaClass __init__ MetaClass __call__ A __new__ A __init__ 五、总结 使用编程可以让我们在创建时候...但编程是python中难以理解地方之一,而且工作中,大部分时候都是不会用到,我们普通定义方式就可以解决问题了,若果说有99%时候你需要控制创建过程,那就使用编程吧。

    1.5K10
    领券