zoukankan      html  css  js  c++  java
  • Python中property描述器的使用

    property描述器可以让访问方法时使用属性访问的语法:

    >>> class Person:
    ...     def __init__(self, name):
    ...         self.__name = name
    ...     def get_name(self):
    ...         return '姓名:' + self.__name
    ...     def set_name(self, name):
    ...         if not isinstance(name, str):
    ...             raise TypeError('名字必须是字符串!')
    ...         self.__name = name
    ...     name = property(get_name, set_name)
    ... >>>
    >>> p = Person('韩晓萌') >>> p.name '姓名:韩晓萌' >>> p.name = 1 Traceback (most recent call last): File "<pyshell#13>", line 1, in <module> p.name = 1 File "<pyshell#10>", line 8, in set_name raise TypeError('名字必须是字符串!') TypeError: 名字必须是字符串! >>> p.name = '杨超越' >>> p.name '姓名:杨超越'

    采用装饰器语法:

    >>> class Person:
    ...     def __init__(self, name):
    ...         self.__name = name
    ...        @property
    ...     def name(self):
    ...         return '姓名:' + self.name
    ...        @name.setter
    ...     def set_name(self, name):
    ...         if not isinstance(name, str):
    ...             raise TypeError('名字必须是字符串!')
    ...         self.name = name
    ...
    >>> >>> p = Person('韩晓萌') >>> p.name '姓名:韩晓萌' >>> p.name = 1 Traceback (most recent call last): File "<pyshell#31>", line 1, in <module> p.name = 1 File "<pyshell#28>", line 12, in name raise TypeError('名字必须是字符串!') TypeError: 名字必须是字符串! >>> p.name = '杨超越' >>> p.name '姓名:杨超越'
  • 相关阅读:
    一道leetcode题的收获如何比较字符串的大小重写sort中的compare[](string &s,string &t){return s+t>t+s};
    unsigned int表示负数问题
    fork()和printf()几点注意细节
    32位机中数据问题
    C++隐藏机制
    ||,&&,++i解答
    enum忽略知识点
    硬链接与软链接
    20145215实验五 Java网络编程及安全
    证书与keytool
  • 原文地址:https://www.cnblogs.com/hanxiaomeng/p/12711362.html
Copyright © 2011-2022 走看看