''''''
'''
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开始计数。
'''

python学习20之面向对象编程高级的更多相关文章

  1. python学习笔记1 -- 面向对象编程高级编程1

    说起高级其实也就是些基础的东西,但是活用和熟用肯定会大幅度提升代码质量 首先要记录的是面向对象的灵活性,及如何去控制其灵活性,她允许你在实例中新增属性和方法,允许你给类新增属性和方法,也支持在定义类时 ...

  2. python 学习笔记7 面向对象编程

    一.概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强..." ...

  3. python学习笔记(七):面向对象编程、类

    一.面向对象编程 面向对象--Object Oriented Programming,简称oop,是一种程序设计思想.在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一 ...

  4. Python学习笔记之面向对象编程(三)Python类的魔术方法

    python类中有一些方法前后都有两个下划线,这类函数统称为魔术方法.这些方法有特殊的用途,有的不需要我们自己定义,有的则通过一些简单的定义可以实现比较神奇的功能 我主要把它们分为三个部分,下文也是分 ...

  5. python学习笔记1 -- 面向对象编程类和实例

    由于之前有一定基础,所以python中的类的概接受的比较快,与其他语言一样, python也是通过类来进行事务的抽象,一切皆对象,要不然怎么说程序员不缺对象呢. 言归正传,python中类的声明是cl ...

  6. 大数据技术之_16_Scala学习_06_面向对象编程-高级+隐式转换和隐式值

    第八章 面向对象编程-高级8.1 静态属性和静态方法8.1.1 静态属性-提出问题8.1.2 基本介绍8.1.3 伴生对象的快速入门8.1.4 伴生对象的小结8.1.5 最佳实践-使用伴生对象解决小孩 ...

  7. python笔记 - day7-1 之面向对象编程

    python笔记 - day7-1 之面向对象编程 什么时候用面向对象: 多个函数的参数相同: 当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可: ...

  8. python学习之路网络编程篇(第四篇)

    python学习之路网络编程篇(第四篇) 内容待补充

  9. python学习9—文件基本操作与高级操作

    python学习9—文件基本操作与高级操作 1. 文件基本操作 打开文件,获得文件句柄:f = open('filename',encoding='utf-8'),open会查询操作系统的编码方式,并 ...

随机推荐

  1. 《java编程思想》多态与接口

    向上转型 定义:把某个对象的引用视为对其基类类型的引用的做法被称为向上转型方法调用绑定 将一个方法调用同一个方法主体关联起来被称作绑定. 前期绑定:程序执行前进行的绑定叫做前期绑定,前期绑定也是jav ...

  2. 一文读懂什么是CA证书

    Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable ...

  3. Python3安装Crypto加密包

    Python3安装Crypto加密包 下载链接 加密包地址 步骤 下载加密包,解压加密包到Python安装目录下Lib\site-packages目录中,尝试在Pycharm中导入 from Cryp ...

  4. A 工艺

    时间限制 : - MS   空间限制 : - KB  评测说明 : 1s,128m 问题描述 小敏和小燕是一对好朋友. 他们正在玩一种神奇的游戏,叫Minecraft. 他们现在要做一个由方块构成的长 ...

  5. 使用vant的时候,报错:component has been registered but not used以及vant的使用方法总结

    使用vant的时候,报错:component has been registered but not used以及vant的使用方法总结 在使用vant的时候. 想按需引入,于是安装了babel-pl ...

  6. Git常用命令(二)

    git clone + URL 获取该项目源代码 $ git log 回顾提交历史 $ git log -p -(数字) 用来显示每次提交的内容差异+(数字)表示看最近几条 $ git log --s ...

  7. python redis 实现简单的消息订阅

    python + redis 实现简单的消息订阅 订阅端 import redis from functools import wraps class Subscribe: def __init__( ...

  8. C语言输出菱形

    #include<stdio.h> #include<string.h> int main(){          int data[7][7] = {0};     for( ...

  9. Array(数组)对象-->概念和创建

    1.什么是数组? 数组对象是使用单独的变量名来存储一系列的值. 2.数组创建的三种方法: 方法1:常规方式 var arr=new Array(); arr[0]="lisa"; ...

  10. python3 进程间通信之socket.socketpair()

    python3 进程间通信之socket.socketpair() socket.socketpair()是什么鬼东西? socket.socketpair()函数仅返回两个已经连接的套接字对象,参数 ...