Python 与C库接口时保留/剥离类名前缀的策略
我有一个C库,它公开了像Python 与C库接口时保留/剥离类名前缀的策略,python,naming-conventions,naming,Python,Naming Conventions,Naming,我有一个C库,它公开了像SkiUser和SkiContact这样的类型,并且有许多像SkiUserLogin()和SkiUserLogout()这样的函数,它们接受指向相关类型的指针作为第一个参数 我想为这个库创建Python/Cython接口,SkiUserLogin()应该成为SkiUser对象的login()方法,这似乎很自然 问题是-鉴于每个类型名称都以Ski开头,我是否应该在Python类中保留此前缀,因此我有以下内容: from ski import SkiUser user = S
SkiUser
和SkiContact
这样的类型,并且有许多像SkiUserLogin()
和SkiUserLogout()
这样的函数,它们接受指向相关类型的指针作为第一个参数
我想为这个库创建Python/Cython接口,SkiUserLogin()
应该成为SkiUser
对象的login()
方法,这似乎很自然
问题是-鉴于每个类型名称都以Ski
开头,我是否应该在Python类中保留此前缀,因此我有以下内容:
from ski import SkiUser
user = SkiUser(...)
user.login()
或者我应该把它剥开,只以包裹的名义保存
import ski
user = ski.User(...)
user.login()
关于使用哪种方法以及原因,有什么建议吗?我将从类型名称中删除
Ski
。如果每个类型和函数都有相同的前缀,那么它可能意味着一个名称空间
此外,您应该使用import ski
,而不是其他变体。有一个很好的解释,你为什么要这样做:
可以通过使用
import语句的特殊语法:来自modu import*
。这是
通常被认为是坏习惯使用导入*
会使代码更难理解
阅读并减少依赖项的划分。
使用modu import func中的
可以精确定位所需的功能
导入并将其放入全局命名空间。虽然危害小得多
而不是导入*,因为它明确显示了在
全局名称空间,它比更简单的导入modu的唯一优势是
这样可以节省一点打字时间
非常糟糕
更好
最佳
我将从类型名称中删除
Ski
。如果每个类型和函数都有相同的前缀,那么它可能意味着一个名称空间
此外,您应该使用import ski
,而不是其他变体。有一个很好的解释,你为什么要这样做:
可以通过使用
import语句的特殊语法:来自modu import*
。这是
通常被认为是坏习惯使用导入*
会使代码更难理解
阅读并减少依赖项的划分。
使用modu import func中的
可以精确定位所需的功能
导入并将其放入全局命名空间。虽然危害小得多
而不是导入*,因为它明确显示了在
全局名称空间,它比更简单的导入modu的唯一优势是
这样可以节省一点打字时间
非常糟糕
更好
最佳
虽然我同意简洁明了的
modu.sqrt
,但不那么漂亮,而是真实的selenium.webdriver.common.keys.keys
?对于这种情况,我建议使用别名,如import selenium.webdriver.common.keys as skey
,然后您可以编写skeys.Keys
。虽然我同意简短的modu.sqrt
,但不如说不那么漂亮,而是真实的selenium.webdriver.common.Keys
?对于这种情况,我建议使用别名,比如导入selenium.webdriver.common.Keys作为skeys
,然后您可以编写skeys.Keys
。
[...]
from modu import *
[...]
x = sqrt(4) # Is sqrt part of modu? A builtin? Defined above?
from modu import sqrt
[...]
x = sqrt(4) # sqrt may be part of modu, if not redefined in between
import modu
[...]
x = modu.sqrt(4) # sqrt is visibly part of modu's