''''''
'''
1.动态绑定:对于一个类,我们可以对它的实例动态绑定新的属性或方法。
为了使所有的实例均可以使用动态绑定的属性和方法,我们也可以采用对类直接动态绑定
'''
class Student():
pass s1=Student()
s1.age=18 #对于实例动态绑定属性
print(s1.age) def set_age(self,age):
self.age=age s2=Student()
s2.set_age=set_age(s2,18) #对于实例动态绑定方法
print(s2.age) Student.set_age=set_age #对于类直接动态绑定一个方法
s3=Student()
s3.set_age(20)
print(s3.age)
'''
2._slot_变量 :
限制实例可以动态绑定的属性
对于父类的_slot_变量,对子类不起作用
'''
class Teacher():
__slots__ = ('name','age') #用元组的方式进行限制 t1=Teacher()
t1.name="Mr. Wang"
t1.age="22"
# t1.salary="2000" #AttributeError: 'Teacher' object has no attribute 'salary'
print(t1.name+":"+t1.age) '''
3.@property
装饰器
'''
class Stu():
@property
def score(self):
return self._score
@score.setter
def score(self,value):
self._score=value s4=Stu()
s4.score=50
print(s4.score)
'''
4.多重继承:一个子类可以同时继承多个父类
结构: class 子类名(父类名1,父类名2,...)
5.__iter__:返回迭代对象
如果一个类想被用于for ... in循环,类似list或tuple那样,就必须实现一个__iter__()方法,该方法返回一个迭代对象,
然后,Python的for循环就会不断调用该迭代对象的__next__()方法拿到循环的下一个值,直到遇到StopIteration错误时退出循环
见斐波那契数列
''' # class Fib(object):
# def __init__(self):
# self.a, self.b = 0, 1 # 初始化两个计数器a,b
#
# def __iter__(self):
# return self # 实例本身就是迭代对象,故返回自己
#
# def __next__(self):
# self.a, self.b = self.b, self.a + self.b # 计算下一个值
# if self.a > 100000: # 退出循环的条件
# raise StopIteration()
# return self.a #返回下一个值
# for n in Fib():
# print(n)
'''
要表现得像list那样按照下标取出元素,需要实现__getitem__()方法:
'''
class Fib(object):
def __getitem__(self, n):
a, b = 1, 1
for x in range(n):
a, b = b, a + b
return a
f=Fib()
print(f[2])
'''
6.__str__():我们用这个方法可以将用print方法打印出来的东西按照我们的想法输出
'''
class Student1(object):
def __init__(self, name):
self.name = name
def __str__(self):
return "name:"+self.name
...
print(Student1('Tom'))
'''
7.__repr__():
'''
s=Student1("Alan")
'''
不用print函数时,s本身的状态就是<__main__.Student object at 0x109afb310>,
这是因为直接显示变量调用的不是__str__(),而是__repr__(),
两者的区别是__str__()返回用户看到的字符串,而__repr__()返回程序开发者看到的字符串,也就是说,__repr__()是为调试服务的。
解决办法是再定义一个__repr__()。但是通常__str__()和__repr__()代码都是一样的,所以,有个偷懒的写法:
'''
class Student2(object):
def __init__(self, name):
self.name = name
def __str__(self):
return 'Student object (name=%s)' % self.name __repr__ = __str__
'''
8.枚举类:Enum类
'''
from enum import Enum Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))
'''
这样我们就获得了Month类型的枚举类,可以直接使用Month.Jan来引用一个常量,或者枚举它的所有成员:
'''
for name, member in Month.__members__.items():
print(name, '=>', member, ',', member.value)
'''
value属性则是自动赋给成员的int常量,默认从1开始计数。
'''

最新文章

  1. 使用ViewPager+Fragment实现选项卡切换效果
  2. iOS10 UI教程禁用视图与用户的交互
  3. C语言sizeof
  4. Unity3D Script Keynote
  5. gridview 一个列勾选框选中,同时选中同一行的另一列勾选框
  6. @properties指针说明
  7. ACM竞赛常用STL(一)
  8. 【翻译】Organizing ASP.NET MVC solutions 如何组织你的ASP.NET MVC解决方案
  9. maven项目启动
  10. Spark ML源码分析之四 树
  11. netcore 获取本地网络IP地址
  12. babel-polyfill的几种使用方式
  13. UUID在Java中的实现与应用
  14. IDEA攻略合辑
  15. 准备dbcp2-2.1.1和pool2-2.4.2 、commons-dbcp-1.4jar包
  16. [LeetCode&amp;Python] Problem 746. Min Cost Climbing Stairs
  17. 最简单的GLSL,Shader
  18. C++设计模式 之 “单一职责”模式:Decorator、Bridge
  19. MySQL5:触发器
  20. Oracle EBS AR 客户取数SQL

热门文章

  1. Python——matplotlib基础绘图函数示例
  2. oracle实现分页功能 limit功能例子
  3. 六、【Docker笔记】Docker数据管理
  4. 201771030106-葛佳诚 实验一 软件工程准备-&lt;初读《构建之法——现代软件工程》有问&gt;
  5. BigDecimal 笔记
  6. PTA | 1019 数字黑洞 (20分)
  7. CDR
  8. 8.4 StringBuilder的介绍及用法(String 和StringBuilder区别)
  9. String 对象--&gt;substr() 方法
  10. Mycat使用配置实践