使数据可导入

autocompvar的Python项目详细描述


https://travis-ci.org/MacHu-GWU/autocompvar-project.svg?branch=masterhttps://img.shields.io/pypi/v/autocompvar.svghttps://img.shields.io/pypi/l/autocompvar.svghttps://img.shields.io/pypi/pyversions/autocompvar.svg

欢迎使用autocompvar文档

在大多数情况下,在代码中输入常量值。因为当你看到价值的时候,你不知道它背后的含义。更好的方法是定义一个常量,并使用该常量变量。

但有时,你有大量的常量,你需要把它放在你的代码中的任何地方。很难记住所有的常量名称。尤其是,有时它们是嵌套的。

autocompvar允许开发人员从数据创建一个常量def脚本,然后就不需要再记住任何东西了。

示例

假设你有一个RPG游戏。你需要编写一些应用程序来使用项目id查询数据,但要记住什么是什么!如果您只是使用常量,那么您的代码是不可维护的!

ItemType
|--- Weapon: subclass_id=1, name=weapon
    |--- Sword: id=1, name=sword
    |--- Dagger: id=2, name=dagger
|--- Armor: subclass_id=2, name=armor
    |--- Plate: id=1, name=plate
    |--- Cloth: id=2, name=cloth

理想情况下,您需要这个:

# define your constant here>>>fromitemtypeimportitemtype# when you type itemtype.name, it gives you all available subclass# when you type itemtype.name____weapon, it gives you all attributes>>>itemtype.name____weapon.subclass_id1>>>itemtype.name____weapon.name____dagger.id2# or you can use a function interface to program that>>>itemtype.name____armor.getattr_by_id(2).namecloth

实际代码

代码示例可以在https://github.com/MacHu-GWU/autocompvar-project/blob/master/example.py)找到

首先,导入autocompvar,准备数据并生成代码。

#!/usr/bin/env python# -*- coding: utf-8 -*-from__future__importprint_functionfromautocompvar.metadataimportgen_code# classname# attrs: all attributes you need to define# keys: indexable attributes, like int, string field that are unique# data: the data to create instance of this class# collection: subclass listdata={"classname":"ItemType","attrs":[],"collection":[{"classname":"SubClass","attrs":["id","name"],"keys":["name"],"data":{"id":1,"name":"weapon"},"collection":[{"classname":"Weapon","attrs":["id","name"],"keys":["name"],"data":{"id":1,"name":"sword"},},{"classname":"Weapon","attrs":["id","name"],"keys":["name"],"data":{"id":2,"name":"dagger"},},],},{"classname":"SubClass","attrs":["id","name"],"keys":["name"],"data":{"id":2,"name":"armor"},"collection":[{"classname":"Armor","attrs":["id","name"],"keys":["name"],"data":{"id":1,"name":"plate"},},{"classname":"Armor","attrs":["id","name"],"keys":["name"],"data":{"id":2,"name":"armor"},},],},],}code=gen_code(data)print(code)

然后您有一个可导入的脚本,它可以执行from your_module import item_type

#!/usr/bin/env python# -*- coding: utf-8 -*-fromautocompvar.baseimportBaseclassItemType(Base):__attrs__=[]__keys__=[]def__init__(self):passclassSubClass(Base):__attrs__=['id','name']__keys__=['name']def__init__(self,id=None,name=None):self.id=idself.name=nameclassWeapon(Base):__attrs__=['id','name']__keys__=['name']def__init__(self,id=None,name=None):self.id=idself.name=nameclassArmor(Base):__attrs__=['id','name']__keys__=['name']def__init__(self,id=None,name=None):self.id=idself.name=nameitem_type=ItemType()sub_class_name_weapon=SubClass(name='weapon',id=1)weapon_name_sword=Weapon(name='sword',id=1)sub_class_name_weapon.name____sword=weapon_name_swordweapon_name_dagger=Weapon(name='dagger',id=2)sub_class_name_weapon.name____dagger=weapon_name_daggeritem_type.name____weapon=sub_class_name_weaponsub_class_name_armor=SubClass(name='armor',id=2)armor_name_plate=Armor(name='plate',id=1)sub_class_name_armor.name____plate=armor_name_platearmor_name_armor=Armor(name='armor',id=2)sub_class_name_armor.name____armor=armor_name_armoritem_type.name____armor=sub_class_name_armor

现在您可以轻松地使用这样的任何常数:

>>>print(item_type.name____weapon.name____sword.id)1>>>print(item_type.name____armor.name____cloth.name)cloth

安装

autocompvar在pypi上发布,所以您只需要:

$ pip install autocompvar

要升级到最新版本:

$ pip install --upgrade autocompvar

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java例外。Lang.Stringindexoutofboundsexception索引超出范围(0)   java Spring引导Freemarker从2.2.0升级失败   重构Java反模式名称?包含对象的对象包含。。。等   用java处理JDBC可能出现的死锁的最佳方法   java无法访问主线程上的数据库,因为它可能会在很长一段时间内锁定UI   java如何将固定大小的画布包装在边框窗格中的滚动窗格居中?   java解析xsd文件后得到空结果   在html页面中表示XML文件的java   socketjava对象流   sql Java越界异常数据库   JavaJBoss7.1.1不会在Mavericks上启动   Twincat ADS事件驱动读取在一段时间后停止工作(Java)   java MyBatis使用生成的ID插入所有   Mojave上缺少MacOS Java控制面板   JavaGuice:如果多次注入相同的依赖项,是否注入了该依赖项的相同实例?