zoukankan      html  css  js  c++  java
  • Python的高级特性10:无聊的@property

    @property装饰器其实有点无聊,单独拿出来作为一个知识点其实没必要,尽管它可以将方法变成属性,让get和set方法更好用,但是,它破坏了python的简洁(不是代码的简洁而是指语法上)。

    下面来说明为什么我会这么说。

    首先,看一个使用property。

    class Student(object):
    
        @property
        def testname(self):
            return self.name
    
        @testname.setter
        def testname(self,name):
            self.name = name
    
    s = Student()
    
    s.testname = "alex"
    print(s.testname)

    结果是:

    /System/Library/Frameworks/Python.framework/Versions/3.4/bin/python3 /Users/lsf/PycharmProjects/py3Project/test3.py
    alex
    
    Process finished with exit code 0

    看上去的确好用,但其实python内置的__getattr__和__setattr__就是将方法变为属性功能的。

    class Stu(object):
        def __init__(self):
            pass
    
        def __setattr__(self,name,value):
            self.__dict__[name] = value
    
        def __getattr__(self):
            return self.name
    
    
    
    s = Stu()
    s.name = 'alex'
    print(s.name)

    结果当然是:

    /System/Library/Frameworks/Python.framework/Versions/3.4/bin/python3 /Users/lsf/PycharmProjects/py3Project/test3.py
    alex
    
    Process finished with exit code 0
  • 相关阅读:
    c++爱问的面试问题
    Ognl底层使用
    [勘探开发]成绩,全栈开发,健全&借贷
    FMS4
    Flex远程调用机制RemoteObject应用技巧
    Flex开发框架cairngorm入门实例
    RC1意思
    获取JAVA[WEB]项目相关路径的几种方法
    排序算法
    jQuery Validate
  • 原文地址:https://www.cnblogs.com/alexkn/p/4671941.html
Copyright © 2011-2022 走看看