Python特殊方法
# __slots__如果要限制添加的属性,例如,Student类只允许添加 name、gender和score 这3个属性,就可以利用Python的一个特殊的__slots__来实现。
# __slots__的目的是限制当前类所能拥有的属性,如果不需要添加任意动态的属性,使用__slots__也能节省内存。
class Student(object):
__slots__ = ('name','gender','score')
def __init__(self,name,gender,score):
self.name = name
self.gender = gender
self.score = score
s = Student('Bob','male',59)
s.name = 'Tim'
s.score = 99
s.grade = 'A' #AttributeError: 'Student' object has no attribute 'grade' # __call__:一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。
class Person(object):
def __init__(self,name,gender):
self.name = name
self.gender = gender
def __call__(self,friend):
print ('My name is %s...' % self.name)
print ('My name is %s...'% friend)
p = Person('Bob','male')
p ('Tim') # __getitem__(self, item) 对象通过 object[key] 触发
# __setitem__(self, key, value) 对象通过 object[key] = value 触发
# __delitem__(self, key) 对象通过 del object[key] 触发
class Func:
def __getitem__(self, item):
return self.__dict__[item]
def __setitem__(self, key, value):
self.__dict__[key] = value
def __delitem__(self, key):
print('delitem: 删除key')
del self.__dict__[key]
def __delattr__(self, item):
print('delattr: 删除key')
del self.__dict__[item]
f = Func()
f['name'] = 'hkey' # __setitem__
f['age'] = 20 # __setitem__
print(f.name) # 对象属性原本的调用方式
print(f['name']) # __getitem__
del f['name'] # __delitem__
print('------')
del f.age # __delattr__ # __hash__调用 hash(object) 触发
class Foo:
def __init__(self):
self.a = 1
self.b = 5
def __hash__(self):
return hash(str(self.a) + str(self.b))
f = Foo()
print(hash(f))
# __slots__如果要限制添加的属性,例如,Student类只允许添加 name、gender和score 这3个属性,就可以利用Python的一个特殊的__slots__来实现。
# __slots__的目的是限制当前类所能拥有的属性,如果不需要添加任意动态的属性,使用__slots__也能节省内存。
class Student(object):
__slots__ = ('name','gender','score')
def __init__(self,name,gender,score):
self.name = name
self.gender = gender
self.score = score
s = Student('Bob','male',59)
s.name = 'Tim'
s.score = 99
s.grade = 'A' #AttributeError: 'Student' object has no attribute 'grade' # __call__:一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。
class Person(object):
def __init__(self,name,gender):
self.name = name
self.gender = gender
def __call__(self,friend):
print ('My name is %s...' % self.name)
print ('My name is %s...'% friend)
p = Person('Bob','male')
p ('Tim') # __getitem__(self, item) 对象通过 object[key] 触发
# __setitem__(self, key, value) 对象通过 object[key] = value 触发
# __delitem__(self, key) 对象通过 del object[key] 触发
class Func:
def __getitem__(self, item):
return self.__dict__[item]
def __setitem__(self, key, value):
self.__dict__[key] = value
def __delitem__(self, key):
print('delitem: 删除key')
del self.__dict__[key]
def __delattr__(self, item):
print('delattr: 删除key')
del self.__dict__[item]
f = Func()
f['name'] = 'hkey' # __setitem__
f['age'] = 20 # __setitem__
print(f.name) # 对象属性原本的调用方式
print(f['name']) # __getitem__
del f['name'] # __delitem__
print('------')
del f.age # __delattr__ # __hash__调用 hash(object) 触发
class Foo:
def __init__(self):
self.a = 1
self.b = 5
def __hash__(self):
return hash(str(self.a) + str(self.b))
f = Foo()
print(hash(f))
Python特殊方法的更多相关文章
- Python swapcase()方法
首先,要明白Python swapcase() 方法用于对字符串的大小写字母进行转换. 其次,了解swapcase()方法语法:str.swapcase() 返回值:返回大小写字母转换后生成的新字符串 ...
- python字符串方法的简单使用
学习python字符串方法的使用,对书中列举的每种方法都做一个试用,将结果记录,方便以后查询. (1) s.capitalize() ;功能:返回字符串的的副本,并将首字母大写.使用如下: >& ...
- Python capitalize()方法
Python capitalize()方法 capitalize()方法返回字符串的一个副本,只有它的第一个字母大写.对于8位的字符串,这个方法与语言环境相关. 语法 以下是capitalize()方 ...
- Python 字符串方法详解
Python 字符串方法详解 本文最初发表于赖勇浩(恋花蝶)的博客(http://blog.csdn.net/lanphaday),如蒙转载,敬请保留全文完整,切勿去除本声明和作者信息. ...
- Python isdigit()方法
描述 Python isdigit() 方法检测字符串是否只由数字组成. 语法 isdigit()方法语法: str.isdigit() 参数 无. 返回值 如果字符串只包含数字则返回 True 否则 ...
- Python str方法总结
1.返回第一个字母大写 S.capitalize(...) S.capitalize() -> string 1 2 3 4 >>>a = 'shaw' >>> ...
- Python list方法总结
1. 向列表的尾部添加一个新的元素 append(...) L.append(object) -- append object to end 1 2 3 4 >>> a = ['sa ...
- Python 魔术方法指南
入门 构造和初始化 构造定制类 用于比较的魔术方法 用于数值处理的魔术方法 表现你的类 控制属性访问 创建定制序列 反射 可以调用的对象 会话管理器 创建描述器对象 持久化对象 总结 附录 介绍 此教 ...
- Python join()方法
描述 Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串. 语法 join()方法语法: str.join(sequence) 参数 sequence -- 要连接的 ...
- python魔术方法
在类中有一些特殊的方法具有特殊的意义,比如__init__和__del__方法,它们的重要性我们已经学习过了. 一般说来,特殊的方法都被用来模仿某个行为.例如,如果你想要为你的类使用x[key]这样的 ...
随机推荐
- XE6 c++builder 设置 font size GetPropInfo SetOrdProp
PPropInfo ppi; PTypeInfo pti; TTypeKinds ttk; TRttiContext context; TRttiType *rttiType TObject* obj ...
- PHP判断客户端是PCweb端还是移动手机端方法
/** * * 根据php的$_SERVER['HTTP_USER_AGENT'] 中各种浏览器访问时所包含各个浏览器特定的字符串来判断是属于PC还是移动端 * @author discuz3x * ...
- WinRAR命令行版本 rar.exe使用详解
RAR 命令行语法~~~~~~~~~~~~~~ 语法 RAR.exe <命令> [ -<开关> ] <压缩文件> [ <@列表文件...> ] ...
- Windows 域用户
Windows 2000 组及说明 分类: Windows 2000 的组分为Security 和 Distribution 两种. Security 类型是Windows 2000 唯一用于赋予权限 ...
- Gradle Maven部署,转化
参考:(易百教程)http://www.yiibai.com/gradle/gradle_deployment.html 目录: Gradle部署 Maven转化为Gradle Gradle部署: c ...
- Centos7搭建pptp一键安装脚本
废话不多说,先上脚本地址:Centos7一键pptp 使用: wget http://files.cnblogs.com/files/wangbin/CentOS7-pptp-host1plus.sh ...
- <U+FEFF> character showing up in files. How to remove them?
You can easily remove them using vim, here are the steps: 1) In your terminal, open the file using v ...
- 判断是否有TrueType字体
function IsTrueTypeAvailable : bool;var {$IFDEF WIN32} rs : TRasterizerStatus; {$ELSE} rs : TRaste ...
- Hibernate迫切左外连接和迫切内连接
•迫切左外连接: •LEFT JOIN FETCH 关键字表示迫切左外连接检索策略. –list() 方法返回的集合中存放实体对象的引用, 每个 Department 对象关联的 Employee ...
- WAL 【转】
重做日志:每当有操作执行前,将数据真正更改时,先前相关操作写入重做日志.这样当断电,或者一些意外,导致后续任务无法完成时,系统恢复后,可以继续完成这些更改 撤消日志:当一些更改在执行一半时,发生意外, ...