2007年01月15日 星期一 22:15
非常好的方案,谢谢! 顺便在请教一下,怎么利用Type对象创建Type对象描述的类的对象? On 1/15/07, Can Xue <xuecan在gmail.com> wrote: > > 我的解决方案: > > def ImportModule(moduleName): > """Import and return a module from given module name. > > @type moduleName: String > @param moduleName: The given module name. > @rtype: Module > @return: The imported module. > """ > module = __import__(moduleName) > components = moduleName.split('.') > for component in components[1:]: > module = getattr(module, component) > return module > > def FromModuleImportObject(moduleName, objectName): > """Import and return an object from a given module name. > > @type moduleName: String > @param moduleName: The given module name. > @type objectName: String > @param objectName: The given object name. > @rtype: Object > @return: The imported object. > """ > module = ImportModule(moduleName) > return module.__getattribute__(objectName) > > 使用方法: > > try: > m = ImportModule('foo.bar') > o = FromModuleImportObject('foo.bar', 'foobar') > except: > # do something you want > pass > > 2007/1/15, Mingzhe Huang <archerzz在gmail.com>: > > > > 问题是import后面的名字是在运行时才能得到的。请看下面: > > > > pluginString = """ > > > > def hello(): > > return 'hello' > > """ > > print >> file('plugin.py', 'w'), pluginString > > if os.paht.exists ('plugin.py'): > > import plugin #plugin这里是静态的,如果plugin是个字符串变量,会报错 > > plugin.hello () > > > > 貌似用eval是最快捷的,呵呵。等会我试试看刘鑫兄弟的方法。 > > > > On 1/15/07, tocer < tocer.deng在gmail.com> wrote: > > > > > > 不知道这样行不行? > > > > > > pluginString = """ > > > > > > def hello(): > > > return 'hello' > > > """ > > > print >> file('plugin.py', 'w'), pluginString > > > if os.paht.exists('plugin.py '): > > > import plugin > > > plugin.hello() > > > > > > > > > Mingzhe Huang wrote:: > > > > 但是import不是静态的关键字吗?我是希望能根据配置文件动态载入用户的代码。 > > > > 比如这样: > > > > pluginString = "UserClass" > > > > import pluginString #这句话显然目前不行 > > > > ob = UserClass() > > > > > > > > 我的假设是引擎不清楚用户的代码,类似eclipse那样,完全是运行时载入的。 > > > > Java有classloader,不知道python除了eval,还有别的什么吗? > > > > > > > > On 1/14/07, tocer < tocer.deng在gmail.com > wrote: > > > >> > > > >> 如果用的代码是 python 写的,直接 import 不就可以么?或者使用 mixin 方 > > > >> 式处理插 > > > >> 件,可以参考 Ulipad 代码。 > > > >> > > > >> Mingzhe Huang wrote:: > > > >> > 我其实想写一个支持插件的引擎。这个引擎大致的原理和eclipse差不多,用户写 > > > >> > 一个xml配置文件告诉引擎一些元数据,然后引擎去读取用户编写的代码来运行。 > > > >> > Java里有classloader机制,可以载入编译好的class文件。我在想,python里 > > > >> 面应 > > > >> > 该也有类似动态载入代码的方法喽。我一开始想的就是lambda或者eval。不知 > > > >> 道还 > > > >> > 会有其它的吗? > > > >> > > > > >> > On 1/14/07, yi huang <yi.codeplayer在gmail.com> wrote: > > > >> >> > > > >> >> On 1/14/07, tocer < tocer.deng在gmail.com> wrote: > > > >> >> > > > > >> >> > 呵呵,也许有时候确实需要这种方式呢。我还真不知道这种方式有什么不好? > > > >> > > > >> -- > > > >> Vim 中文 Google 论坛 http://groups.google.com/group/Vim-cn > > > >> _______________________________________________ > > > >> python-chinese > > > >> Post: send python-chinese在lists.python.cn > > > >> Subscribe: send subscribe to python-chinese-request在lists.python.cn > > > >> Unsubscribe: send unsubscribe to > > > python-chinese-request在lists.python.cn > > > >> Detail Info: http://python.cn/mailman/listinfo/python-chinese > > > > > > > > > > > > > > > > > > > > > > > > > > > ------------------------------------------------------------------------ > > > > > > > > _______________________________________________ > > > > python-chinese > > > > Post: send python-chinese在lists.python.cn > > > > Subscribe: send subscribe to python-chinese-request在lists.python.cn > > > > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > > > > Detail Info: http://python.cn/mailman/listinfo/python-chinese > > > > > > -- > > > Vim 中文 Google 论坛 http://groups.google.com/group/Vim-cn > > > _______________________________________________ > > > python-chinese > > > Post: send python-chinese在lists.python.cn > > > Subscribe: send subscribe to python-chinese-request在lists.python.cn > > > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > > > Detail Info: http://python.cn/mailman/listinfo/python-chinese > > > > > > > > > > -- > > Best Regards, > > > > Archer > > > > Ming Zhe Huang > > > > _______________________________________________ > > python-chinese > > Post: send python-chinese在lists.python.cn > > Subscribe: send subscribe to python-chinese-request在lists.python.cn > > Unsubscribe: send unsubscribe to > > python-chinese-request在lists.python.cn > > Detail Info: http://python.cn/mailman/listinfo/python-chinese > > > > > > -- > 薛粲 > > 有耕耘方能有收获,愿能与您顺心携手共成长。 > _______________________________________________ > python-chinese > Post: send python-chinese在lists.python.cn > Subscribe: send subscribe to python-chinese-request在lists.python.cn > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > Detail Info: http://python.cn/mailman/listinfo/python-chinese > -- Best Regards, Archer Ming Zhe Huang -------------- 下一部分 -------------- 一个HTML附件被移除... URL: http://python.cn/pipermail/python-chinese/attachments/20070115/4a14358a/attachment.htm
2007年01月15日 星期一 22:24
不用客气。 Type对象描述的类? 不太明白。 2007/1/15, Mingzhe Huang <archerzz在gmail.com>: > 非常好的方案,谢谢! > 顺便在请教一下,怎么利用Type对象创建Type对象描述的类的对象?
2007年01月15日 星期一 22:35
我猜你所謂「利用Type对象创建Type对象描述的类的对象」是要求下面的效果? >>> class AType( object): ... pass ... >>> BType = AType >>> print BType>>> a = AType(); b = BType() >>> print type(a), type(b) 另,關於動態匯入模組 (或套件),Python Library Reference 的說明就蠻清楚的了 ( http://docs.python.org/lib/built-in-funcs.html),而 Django 裡面有更多複雜的範例。 On 1/15/07, Mingzhe Huang <archerzz在gmail.com> wrote: > > 非常好的方案,谢谢! > 顺便在请教一下,怎么利用Type对象创建Type对象描述的类的对象? > > On 1/15/07, Can Xue <xuecan在gmail.com> wrote: > > > > 我的解决方案: > > > > def ImportModule(moduleName): > > """Import and return a module from given module name. > > > > @type moduleName: String > > @param moduleName: The given module name. > > @rtype: Module > > @return: The imported module. > > """ > > module = __import__(moduleName) > > components = moduleName.split('.') > > for component in components[1:]: > > module = getattr(module, component) > > return module > > > > def FromModuleImportObject(moduleName, objectName): > > """Import and return an object from a given module name. > > > > @type moduleName: String > > @param moduleName: The given module name. > > @type objectName: String > > @param objectName: The given object name. > > @rtype: Object > > @return: The imported object. > > """ > > module = ImportModule(moduleName) > > return module.__getattribute__(objectName) > > > > 使用方法: > > > > try: > > m = ImportModule('foo.bar') > > o = FromModuleImportObject('foo.bar', 'foobar') > > except: > > # do something you want > > pass > > > > 2007/1/15, Mingzhe Huang <archerzz在gmail.com>: > > > > > > 问题是import后面的名字是在运行时才能得到的。请看下面: > > > > > > pluginString = """ > > > > > > def hello(): > > > return 'hello' > > > """ > > > print >> file('plugin.py', 'w'), pluginString > > > if os.paht.exists ('plugin.py'): > > > import plugin #plugin这里是静态的,如果plugin是个字符串变量,会报错 > > > plugin.hello () > > > > > > 貌似用eval是最快捷的,呵呵。等会我试试看刘鑫兄弟的方法。 > > > > > > On 1/15/07, tocer < tocer.deng在gmail.com> wrote: > > > > > > > > 不知道这样行不行? > > > > > > > > pluginString = """ > > > > > > > > def hello(): > > > > return 'hello' > > > > """ > > > > print >> file('plugin.py', 'w'), pluginString > > > > if os.paht.exists('plugin.py '): > > > > import plugin > > > > plugin.hello() > > > > > > > > > > > > Mingzhe Huang wrote:: > > > > > 但是import不是静态的关键字吗?我是希望能根据配置文件动态载入用户的代码。 > > > > > 比如这样: > > > > > pluginString = "UserClass" > > > > > import pluginString #这句话显然目前不行 > > > > > ob = UserClass() > > > > > > > > > > 我的假设是引擎不清楚用户的代码,类似eclipse那样,完全是运行时载入的。 > > > > > Java有classloader,不知道python除了eval,还有别的什么吗? > > > > > > > > > > On 1/14/07, tocer < tocer.deng在gmail.com > wrote: > > > > >> > > > > >> 如果用的代码是 python 写的,直接 import 不就可以么?或者使用 mixin 方 > > > > >> 式处理插 > > > > >> 件,可以参考 Ulipad 代码。 > > > > >> > > > > >> Mingzhe Huang wrote:: > > > > >> > 我其实想写一个支持插件的引擎。这个引擎大致的原理和eclipse差不多,用户写 > > > > >> > 一个xml配置文件告诉引擎一些元数据,然后引擎去读取用户编写的代码来运行。 > > > > >> > Java里有classloader机制,可以载入编译好的class文件。我在想,python里 > > > > >> 面应 > > > > >> > 该也有类似动态载入代码的方法喽。我一开始想的就是lambda或者eval。不知 > > > > >> 道还 > > > > >> > 会有其它的吗? > > > > >> > > > > > >> > On 1/14/07, yi huang <yi.codeplayer在gmail.com> wrote: > > > > >> >> > > > > >> >> On 1/14/07, tocer < tocer.deng在gmail.com> wrote: > > > > >> >> > > > > > >> >> > 呵呵,也许有时候确实需要这种方式呢。我还真不知道这种方式有什么不好? > > > > >> > > > > >> -- > > > > >> Vim 中文 Google 论坛 http://groups.google.com/group/Vim-cn > > > > >> _______________________________________________ > > > > >> python-chinese > > > > >> Post: send python-chinese在lists.python.cn > > > > >> Subscribe: send subscribe to > > > > python-chinese-request在lists.python.cn > > > > >> Unsubscribe: send unsubscribe to > > > > python-chinese-request在lists.python.cn > > > > >> Detail Info: http://python.cn/mailman/listinfo/python-chinese > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ------------------------------------------------------------------------ > > > > > > > > > > _______________________________________________ > > > > > python-chinese > > > > > Post: send python-chinese在lists.python.cn > > > > > Subscribe: send subscribe to python-chinese-request在lists.python.cn > > > > > > > > > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > > > > > Detail Info: http://python.cn/mailman/listinfo/python-chinese > > > > > > > > -- > > > > Vim 中文 Google 论坛 http://groups.google.com/group/Vim-cn > > > > _______________________________________________ > > > > python-chinese > > > > Post: send python-chinese在lists.python.cn > > > > Subscribe: send subscribe to python-chinese-request在lists.python.cn > > > > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > > > > Detail Info: http://python.cn/mailman/listinfo/python-chinese > > > > > > > > > > > > > > > -- > > > Best Regards, > > > > > > Archer > > > > > > Ming Zhe Huang > > > > > > _______________________________________________ > > > python-chinese > > > Post: send python-chinese在lists.python.cn > > > Subscribe: send subscribe to python-chinese-request在lists.python.cn > > > Unsubscribe: send unsubscribe to > > > python-chinese-request在lists.python.cn > > > Detail Info: http://python.cn/mailman/listinfo/python-chinese > > > > > > > > > > > -- > > 薛粲 > > > > 有耕耘方能有收获,愿能与您顺心携手共成长。 > > _______________________________________________ > > python-chinese > > Post: send python-chinese在lists.python.cn > > Subscribe: send subscribe to python-chinese-request在lists.python.cn > > Unsubscribe: send unsubscribe to > > python-chinese-request在lists.python.cn > > Detail Info: http://python.cn/mailman/listinfo/python-chinese > > > > > > -- > Best Regards, > > Archer > > Ming Zhe Huang > > _______________________________________________ > python-chinese > Post: send python-chinese在lists.python.cn > Subscribe: send subscribe to python-chinese-request在lists.python.cn > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > Detail Info: http://python.cn/mailman/listinfo/python-chinese > -- with regards, Yung-Yu Chen yyc在seety.org -------------- 下一部分 -------------- 一个HTML附件被移除... URL: http://python.cn/pipermail/python-chinese/attachments/20070115/5a60a2e7/attachment-0001.html
2007年01月15日 星期一 22:57
Can Xue兄弟给的这个例子: def FromModuleImportObject(moduleName, objectName): """Import and return an object from a given module name. @type moduleName: String @param moduleName: The given module name. @type objectName: String @param objectName: The given object name. @rtype: Object @return: The imported object. """ module = ImportModule(moduleName) return module.__getattribute__(objectName) 这个方法返回的是一个'type'类型,所以需要实例化'type'类型。 On 1/15/07, Yung-Yu Chen <yungyuc在gmail.com> wrote: > > 我猜你所謂「利用Type对象创建Type对象描述的类的对象」是要求下面的效果? > > >>> class AType( object): > ... pass > ... > >>> BType = AType > >>> print BType >> >>> a = AType(); b = BType() > >>> print type(a), type(b) > > > 另,關於動態匯入模組 (或套件),Python Library Reference 的說明就蠻清楚的了 (http://docs.python.org/lib/built-in-funcs.html)<http://docs.python.org/lib/built-in-funcs.html%29>,而 > Django 裡面有更多複雜的範例。 > > On 1/15/07, Mingzhe Huang <archerzz在gmail.com > wrote: > > > > 非常好的方案,谢谢! > > 顺便在请教一下,怎么利用Type对象创建Type对象描述的类的对象? > > > > On 1/15/07, Can Xue <xuecan在gmail.com> wrote: > > > > > > 我的解决方案: > > > > > > def ImportModule(moduleName): > > > """Import and return a module from given module name. > > > > > > @type moduleName: String > > > @param moduleName: The given module name. > > > @rtype: Module > > > @return: The imported module. > > > """ > > > module = __import__(moduleName) > > > components = moduleName.split('.') > > > for component in components[1:]: > > > module = getattr(module, component) > > > return module > > > > > > def FromModuleImportObject(moduleName, objectName): > > > """Import and return an object from a given module name. > > > > > > @type moduleName: String > > > @param moduleName: The given module name. > > > @type objectName: String > > > @param objectName: The given object name. > > > @rtype: Object > > > @return: The imported object. > > > """ > > > module = ImportModule(moduleName) > > > return module.__getattribute__(objectName) > > > > > > 使用方法: > > > > > > try: > > > m = ImportModule('foo.bar') > > > o = FromModuleImportObject('foo.bar', 'foobar') > > > except: > > > # do something you want > > > pass > > > > > > 2007/1/15, Mingzhe Huang <archerzz在gmail.com>: > > > > > > > > 问题是import后面的名字是在运行时才能得到的。请看下面: > > > > > > > > pluginString = """ > > > > > > > > def hello(): > > > > return 'hello' > > > > """ > > > > print >> file('plugin.py', 'w'), pluginString > > > > if os.paht.exists ('plugin.py'): > > > > import plugin #plugin这里是静态的,如果plugin是个字符串变量,会报错 > > > > plugin.hello () > > > > > > > > 貌似用eval是最快捷的,呵呵。等会我试试看刘鑫兄弟的方法。 > > > > > > > > On 1/15/07, tocer < tocer.deng在gmail.com> wrote: > > > > > > > > > > 不知道这样行不行? > > > > > > > > > > pluginString = """ > > > > > > > > > > def hello(): > > > > > return 'hello' > > > > > """ > > > > > print >> file('plugin.py', 'w'), pluginString > > > > > if os.paht.exists('plugin.py '): > > > > > import plugin > > > > > plugin.hello() > > > > > > > > > > > > > > > Mingzhe Huang wrote:: > > > > > > 但是import不是静态的关键字吗?我是希望能根据配置文件动态载入用户的代码。 > > > > > > 比如这样: > > > > > > pluginString = "UserClass" > > > > > > import pluginString #这句话显然目前不行 > > > > > > ob = UserClass() > > > > > > > > > > > > 我的假设是引擎不清楚用户的代码,类似eclipse那样,完全是运行时载入的。 > > > > > > Java有classloader,不知道python除了eval,还有别的什么吗? > > > > > > > > > > > > On 1/14/07, tocer < tocer.deng在gmail.com > wrote: > > > > > >> > > > > > >> 如果用的代码是 python 写的,直接 import 不就可以么?或者使用 mixin 方 > > > > > >> 式处理插 > > > > > >> 件,可以参考 Ulipad 代码。 > > > > > >> > > > > > >> Mingzhe Huang wrote:: > > > > > >> > 我其实想写一个支持插件的引擎。这个引擎大致的原理和eclipse差不多,用户写 > > > > > >> > 一个xml配置文件告诉引擎一些元数据,然后引擎去读取用户编写的代码来运行。 > > > > > >> > Java里有classloader机制,可以载入编译好的class文件。我在想,python里 > > > > > >> 面应 > > > > > >> > 该也有类似动态载入代码的方法喽。我一开始想的就是lambda或者eval。不知 > > > > > >> 道还 > > > > > >> > 会有其它的吗? > > > > > >> > > > > > > >> > On 1/14/07, yi huang <yi.codeplayer在gmail.com> wrote: > > > > > >> >> > > > > > >> >> On 1/14/07, tocer < tocer.deng在gmail.com> wrote: > > > > > >> >> > > > > > > >> >> > 呵呵,也许有时候确实需要这种方式呢。我还真不知道这种方式有什么不好? > > > > > >> > > > > > >> -- > > > > > >> Vim 中文 Google 论坛 http://groups.google.com/group/Vim-cn > > > > > >> _______________________________________________ > > > > > >> python-chinese > > > > > >> Post: send python-chinese在lists.python.cn > > > > > >> Subscribe: send subscribe to > > > > > python-chinese-request在lists.python.cn > > > > > >> Unsubscribe: send unsubscribe to > > > > > python-chinese-request在lists.python.cn > > > > > >> Detail Info: http://python.cn/mailman/listinfo/python-chinese > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ------------------------------------------------------------------------ > > > > > > > > > > > > _______________________________________________ > > > > > > python-chinese > > > > > > Post: send python-chinese在lists.python.cn > > > > > > Subscribe: send subscribe to python-chinese-request在lists.python.cn > > > > > > > > > > > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > > > > > > Detail Info: http://python.cn/mailman/listinfo/python-chinese > > > > > > > > > > -- > > > > > Vim 中文 Google 论坛 http://groups.google.com/group/Vim-cn > > > > > _______________________________________________ > > > > > python-chinese > > > > > Post: send python-chinese在lists.python.cn > > > > > Subscribe: send subscribe to > > > > > python-chinese-request在lists.python.cn > > > > > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > > > > > Detail Info: http://python.cn/mailman/listinfo/python-chinese > > > > > > > > > > > > > > > > > > > > -- > > > > Best Regards, > > > > > > > > Archer > > > > > > > > Ming Zhe Huang > > > > > > > > _______________________________________________ > > > > python-chinese > > > > Post: send python-chinese在lists.python.cn > > > > Subscribe: send subscribe to python-chinese-request在lists.python.cn > > > > Unsubscribe: send unsubscribe to > > > > python-chinese-request在lists.python.cn > > > > Detail Info: http://python.cn/mailman/listinfo/python-chinese > > > > > > > > > > > > > > > > -- > > > 薛粲 > > > > > > 有耕耘方能有收获,愿能与您顺心携手共成长。 > > > _______________________________________________ > > > python-chinese > > > Post: send python-chinese在lists.python.cn > > > Subscribe: send subscribe to python-chinese-request在lists.python.cn > > > Unsubscribe: send unsubscribe to > > > python-chinese-request在lists.python.cn > > > Detail Info: http://python.cn/mailman/listinfo/python-chinese > > > > > > > > > > > -- > > Best Regards, > > > > Archer > > > > Ming Zhe Huang > > > > _______________________________________________ > > python-chinese > > Post: send python-chinese在lists.python.cn > > Subscribe: send subscribe to python-chinese-request在lists.python.cn > > Unsubscribe: send unsubscribe to > > python-chinese-request在lists.python.cn > > Detail Info: http://python.cn/mailman/listinfo/python-chinese > > > > > > -- > with regards, > Yung-Yu Chen > > yyc在seety.org > _______________________________________________ > python-chinese > Post: send python-chinese在lists.python.cn > Subscribe: send subscribe to python-chinese-request在lists.python.cn > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > Detail Info: http://python.cn/mailman/listinfo/python-chinese > -- Best Regards, Archer Ming Zhe Huang -------------- 下一部分 -------------- 一个HTML附件被移除... URL: http://python.cn/pipermail/python-chinese/attachments/20070115/c06559aa/attachment-0001.htm
2007年01月16日 星期二 17:03
On 1/15/07, 头太晕 <torrycn在gmail.com> wrote: > > > > 2007/1/15, Mingzhe Huang <archerzz在gmail.com>: > > > > 问题是import后面的名字是在运行时才能得到的。请看下面: > > > > pluginString = """ > > > > def hello(): > > return 'hello' > > """ > > print >> file('plugin.py', 'w'), pluginString > > if os.paht.exists ('plugin.py'): > > import plugin #plugin这里是静态的,如果plugin是个字符串变量,会报错 > > plugin.hello () > > > 此人钻进牛角尖儿了.... > 错,这不是钻牛角尖! _______________________________________________ > python-chinese > Post: send python-chinese在lists.python.cn > Subscribe: send subscribe to python-chinese-request在lists.python.cn > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > Detail Info: http://python.cn/mailman/listinfo/python-chinese > -- ※※※※※※※※※※※※※※※※※※※※※※※※ My blog: http://blog.donews.com/ygao Forum http://groups.google.com/group/python_study ※※※※※※※※※※※※※※※※※※※※※※※※ -------------- 下一部分 -------------- 一个HTML附件被移除... URL: http://python.cn/pipermail/python-chinese/attachments/20070116/0d6d454f/attachment.html
2007年01月21日 星期日 15:24
¿´²»¶®¸÷λ´óÅ£ÔÚ½²Ê²Ã´....²»ÖªµÀÏÂÃæÕâÖÖ·½·¨ÊDz»ÊÇÒ²¿ÉÒÔ½Ð×ö¶¯Ì¬´´½¨º¯Êý.. >>> class A: ... pass ... >>> a = A() >>> def B(): ... print "5" ... >>> a.show = B >>> a.show>>> a.show() 5 >>> -------------- 下一部分 -------------- Ò»¸öHTML¸½¼þ±»ÒƳý... URL: http://python.cn/pipermail/python-chinese/attachments/20070121/a7cf6501/attachment.html
2007年01月21日 星期日 17:29
你这个叫“动态改变函数(类方法)”也许更合适。 jian hui zheng wrote:: > 看不懂各位大牛在讲什么....不知道下面这种方法是不是也可以叫做动态创建函数.. >>>> class A: > ... pass > ... >>>> a = A() >>>> def B(): > ... print "5" > ... >>>> a.show = B >>>> a.show >>>>> a.show() > 5 -- Vim 中文 Google 论坛 http://groups.google.com/group/Vim-cn
2007年01月21日 星期日 19:45
On 1/21/07, tocer <tocer.deng at gmail.com> wrote: > 你这个叫"动态改变函数(类方法)"也许更合适。 > 没有改变类(A)方法,只改变了对象(a)的方法
Zeuux © 2025
京ICP备05028076号