Python 全栈:识别关键字练习

190 @property使用解释说明

property(fget=None, fset=None, fdel=None, doc=None)

返回 property 属性

不适用装饰器,定义类上的属性:

class Student:
    def __init__(self):
        self._name = None

    def get_name(self):
        return self._name

    def set_name(self, val):
        self._name = val

    def del_name(self):
        del self._name

    # 显示调用 property 函数    
    name = property(get_name, set_name, del_name, "name property")

显示的调用 property 函数定义类上的属性:

In [94]: xiaoming = Student()
    ...: xiaoming.name = 'xiaoming'

In [95]: xiaoming.name
Out[95]: 'xiaoming'

使用 python 装饰器 @property,同样能实现对类上属性的定义 ,并且更简洁:

class Student:
    def __init__(self):
        self._name = None

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, val):
        self._name = val

    @name.deleter
    def name(self):
        del self._name

In [98]: xiaoming = Student()

In [99]: xiaoming.name = 'xiaoming'

In [101]: xiaoming.name
Out[101]: 'xiaoming'

191 标识符 is 作用

is 判断标识号是否相等

is 比较的是两个对象的标识号是否相等,Python 中使用 id() 函数获取对象的标识号。

In [1]: a = [1,2,3]
In [2]: id(a) 
Out[2]: 95219592

In [5]: b = [1,2,3] #再创建一个列表实例,元素取值也为 1,2,3
In [6]: id(b) 
Out[6]: 95165640

创建的两个列表实例位于不同的内存地址,所以它们的标识号不等。

In [7]: a is b
Out[7]: False

即便对于两个空列表实例,它们 is 比较的结果也是 False

192 标识符 is 的特殊之处

对于值类型而言,不同的编译器可能会做不同的优化。

从性能角度考虑,它们会缓存一些值类型的对象实例。

还有 73% 的精彩内容
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
支付 ¥1.99 继续阅读

推荐阅读更多精彩内容