Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 类方法和属性的命名约定_Python_Class_Methods_Attr - Fatal编程技术网

Python 类方法和属性的命名约定

Python 类方法和属性的命名约定,python,class,methods,attr,Python,Class,Methods,Attr,命名类属性及其方法(函数)的最佳实践是什么 创建类的实例: a = Base() 了解此类中可用的方法和属性: print dir(a) 获取此输出: ['__doc__', '__init__', '__module__', 'name', 'print_this'] 通过读取dir()输出中的名称,不可能看到变量(类属性)和方法(类函数)的位置 要使用什么命名约定来区分变量与函数(或属性与方法)?方法通常应该包含一个动词,例如打印此,计算该,保存,因为它们执行一些操作 属性和属性只是一

命名类属性及其方法(函数)的最佳实践是什么

创建类的实例:

a = Base()
了解此类中可用的方法和属性:

print dir(a)
获取此输出:

['__doc__', '__init__', '__module__', 'name', 'print_this']
通过读取dir()输出中的名称,不可能看到变量(类属性)和方法(类函数)的位置


要使用什么命名约定来区分变量与函数(或属性与方法)?

方法通常应该包含一个动词,例如
打印此
计算该
保存
,因为它们执行一些操作

属性和属性只是一个简单的名词,例如
名称
状态
计数
,因为它们只包含一个值,或者在属性的情况下,基础函数应该计算并返回一个值,而没有其他副作用

你的问题很模糊:

  • 是关于Python中的命名约定吗?对此,您应该参考

  • 是关于如何通过查看方法和属性的名称来区分它们吗?关于这一点,请参见上面我的经验法则

  • 它是关于如何以编程方式区分方法和属性的吗?在这种情况下,您可以使用
    inspect
    模块提供明确的答案,例如:

    import inspect
    
    for attr in dir(a):
        if inspect.ismethod(getattr(a, attr)):
            print '%s is a method' % attr
        else:
            print '%s is an attribute or property' % attr
    

如果我是你,我会去阅读命名约定,也可以看看Flake 8并开始使用它。看看PEP 8肯定是个好主意,但也值得注意的是,在Python中尝试实现这样的命名约定充满了陷阱。例如,
属性
应该获取属性变量样式还是实例方法样式?根据上下文的不同,它们同样有效。
在dir(a)中为name打印{name:type(a[name])
-现在您知道了类型这个问题没有正确的答案。“我应该使用什么命名约定?”布尔语有点难以命名
x.printable
是可以的,但是
y.calculate\u slow
是一种模糊的方法,基于名称aloneThe
callable()
技巧并不总是有效。如果一个属性或属性包含一个可调用项怎么办?@glglgl很好。。。已将其更改为使用
inspect.ismethod
@Eric-对于布尔值,在变量前面加上“is”或“do”。例如,'is_printable'和'do_calculation_slow'。@CraigS.Anderson:
是我同意的,但作为一个祈使动词,
do_u
对我来说强烈暗示着“方法”
import inspect

for attr in dir(a):
    if inspect.ismethod(getattr(a, attr)):
        print '%s is a method' % attr
    else:
        print '%s is an attribute or property' % attr