# __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特殊方法的更多相关文章

  1. Python swapcase()方法

    首先,要明白Python swapcase() 方法用于对字符串的大小写字母进行转换. 其次,了解swapcase()方法语法:str.swapcase() 返回值:返回大小写字母转换后生成的新字符串 ...

  2. python字符串方法的简单使用

    学习python字符串方法的使用,对书中列举的每种方法都做一个试用,将结果记录,方便以后查询. (1) s.capitalize() ;功能:返回字符串的的副本,并将首字母大写.使用如下: >& ...

  3. Python capitalize()方法

    Python capitalize()方法 capitalize()方法返回字符串的一个副本,只有它的第一个字母大写.对于8位的字符串,这个方法与语言环境相关. 语法 以下是capitalize()方 ...

  4. Python 字符串方法详解

    Python 字符串方法详解 本文最初发表于赖勇浩(恋花蝶)的博客(http://blog.csdn.net/lanphaday),如蒙转载,敬请保留全文完整,切勿去除本声明和作者信息.        ...

  5. Python isdigit()方法

    描述 Python isdigit() 方法检测字符串是否只由数字组成. 语法 isdigit()方法语法: str.isdigit() 参数 无. 返回值 如果字符串只包含数字则返回 True 否则 ...

  6. Python str方法总结

    1.返回第一个字母大写 S.capitalize(...) S.capitalize() -> string 1 2 3 4 >>>a = 'shaw' >>> ...

  7. Python list方法总结

    1. 向列表的尾部添加一个新的元素 append(...) L.append(object) -- append object to end 1 2 3 4 >>> a = ['sa ...

  8. Python 魔术方法指南

    入门 构造和初始化 构造定制类 用于比较的魔术方法 用于数值处理的魔术方法 表现你的类 控制属性访问 创建定制序列 反射 可以调用的对象 会话管理器 创建描述器对象 持久化对象 总结 附录 介绍 此教 ...

  9. Python join()方法

    描述 Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串. 语法 join()方法语法: str.join(sequence) 参数 sequence -- 要连接的 ...

  10. python魔术方法

    在类中有一些特殊的方法具有特殊的意义,比如__init__和__del__方法,它们的重要性我们已经学习过了. 一般说来,特殊的方法都被用来模仿某个行为.例如,如果你想要为你的类使用x[key]这样的 ...

随机推荐

  1. apache http get 和 post 请求

    1.首先要把jar依赖进项目 <dependency> <groupId>org.apache.httpcomponents</groupId> <artif ...

  2. HTML 表格标签

    <table border="1"> <tr> <td>row 1, cell 1</td> <td>row 1, ce ...

  3. Spring MVC 异常处理 - DefaultHandlerExceptionResolver

    对一些特殊的异常进行处理,比如方法类型不匹配, 转换错误.

  4. hibernate hql limit的实现方式

    query.setFirstResult(startIndex);//开始索引query.setMaxResults(maxSize);//取几条 如 limit 1,5HQL:query.setFi ...

  5. Haskell语言学习笔记(60)Biapplicative

    Biapplicative class Bifunctor p => Biapplicative p where bipure :: a -> b -> p a b (<< ...

  6. intelij创建MapReduce工程

    1.创建一个maven工程 2.POM文件 <?xml version="1.0" encoding="UTF-8"?><project xm ...

  7. Delphi 创建一个url网址快捷方式代码

    procedure CreateURLShortcut(const ShortcutFile, URL: string); var F: TextFile; // text file begin {$ ...

  8. 重学Java

    Java web 的课程告一段落了 现在我觉得我应该重新学习一下 Java基础  先分享下昨天学习递归后写的两个短短的代码 1.求5的阶乘 package test; public class fiv ...

  9. Jacobi 矩阵

    求微分其实就是线性化,导数其实就是线性空间之间的线性变换,Jaocibian矩阵本质上就是导数. 比如,映射在处的导数就是在处的切空间到在处的切空间之间的线性映射.切空间都是矢量空间,都有基底,所以这 ...

  10. MongoDB服务无法启动,发生服务特定错误:100

    问题:MongoDB服务无法启动,发生服务特定错误:100 原因:没有正常关闭mongod服务,导致mongod被锁 解决方案:进入db文件夹,删除mongod.lock文件,然后重新启动服务即可