Python_day9
多继承:
python支持,但不建议使用
dir(): 获取类或者对象的方法和属性
__mro__:获取类的继承顺序
class A(object):
def run(self):
print('run A run') class B(A):
def run(self):
super().run()
print('run B run') class C(A):
def run(self):
super().run()
print('run C run') class D(B, C):
pass c = C()
c.run()
# 获取类或者对象的方法和属性
print(dir(C))
# 获取类的继承顺序
print(C.__mro__) d = D()
d.run()
print(D.__mro__)
- python魔法方法
class Student(object):
def __init__(self, name = 'python'):
self.__name = name def __str__(self):
'''打印本类对象时,自动调用'''
return 'hello, %s' % self.__name def __repr__(self):
'''在解释器环境下直接输出本对象,自动调用的方法'''
return self.__str__() def __len__(self):
'''调用len函数的时候自动调用的方法'''
return 100 def __call__(self):
'''调用本类对象的时候自动调用的方法'''
print('Student object name:%s' % self.__name) print(dir(Student)) s = Student()
print(s) print(len(s)) s()
class Fib(object):
cnt = 0
def __init__(self):
self.a = 0
self.b = 1 def __iter__(self):
'''返回可迭代对象'''
return self def __next__(self):
'''随着循环自动调用的'''
self.a, self.b = self.b, self.a+self.b if self.a >= 100:
'''循环遍历终止'''
raise StopIteration()
Fib.cnt += 1 return self.a def __len__(self):
return Fib.cnt def __getitem__(self, n):
'''索引时自动调用的方法'''
if isinstance(n, int):
a, b = 0, 1
while n >= 0:
a, b = b, a+b
n -= 1
return a if isinstance(n, slice):
'''切片类型 start:end'''
if n.start == None:
start = 0
else:
start = n.start
if n.stop == None:
return 'error'
stop = n.stop
l = []
for i in range(start, stop):
l.append(self[i])
return l f = Fib() print(dir(f)) for i in f:
print(i, end=' ')
print() print(len(f)) for i in range(20):
print(f[i], end=' ')
print() print(f[0:3])
print(f[1:10])
- 枚举类
INSERT=1 # 缺点就是本质是变量,可以改变
if choose == INSERT:
pass
from enum import Enum, unique @ unique # 防止枚举成员的重复
class Menu(Enum):
INSERT=1
DELETE=2
UPDATE=3
SHOW=4
# CHOOSE=4 print(Menu.INSERT.value)
# Menu.INSERT.value = 2
print(Menu['INSERT'])
- 元类(metaclass)
class Test(object):
def show(self, name='python'):
print('hello %s', name)
# type()构建一个类 def f(self, name='python'):
print('hello %s'% name) Test = type('Test', (object,), dict(show=f)) t = Test()
t.show() # 另一种构建类的方法,是先构建元类,以元类为模板构建类
class ListMetaclass(type):
def __new__(cls, name, bases, attrs):
'''类方法'''
attrs['add'] = lambda self, value : self.append(value)
return type.__new__(cls, name, bases, attrs) class Mylist(list, metaclass=ListMetaclass):
pass l = Mylist()
print(type(l))
l.add(1)
l.add('hello')
print(l)
Python_day9的更多相关文章
随机推荐
- Java学习笔记 -- Java定时调度工具Timer类
1 关于 (时间宝贵的小姐姐请跳过) 本教程是基于Java定时任务调度工具详解之Timer篇的学习笔记. 什么是定时任务调度 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务. 在Ja ...
- Windows 7升级1月更新汇总后导致SMBv2网络无法正常工作
在本月的补丁星期二活动日中,微软面向Windows 7.Windows 2008 R2服务器系统推出了KB4480970的月度更新汇总.然而根据部分用户反馈,在安装该更新之后导致系统的网络设置无法正常 ...
- 【译】BERT表示的可解释性分析
目录 从词袋模型到BERT 分析BERT表示 不考虑上下文的方法 考虑语境的方法 结论 本文翻译自Are BERT Features InterBERTible? 从词袋模型到BERT Mikol ...
- 谈谈你对spring的理解?
spring么,就是春天了.春天,动物.....不可描述的季节……你懂得!!! 希望这么说能把面试官逗乐吧. spring可以实现java模块化开发,贯穿表现层,业务层,逻辑层,实现了各个层之间的解耦 ...
- 采用ftpServer构建嵌入式ftp服务器时设置pass功能
讲ftpserver嵌入式ftp服务器的文章很多,但是都没有介绍pass功能设置的. apach上pass部分也是针对的ftpd服务器的xml配置,关于嵌入式ftp服务器设置pass功能的部分几乎没有 ...
- rsync配置安装
rsync安装 1.将rsync包解压,包链接: https://pan.baidu.com/s/1jHPosXC 密码: maay 2.进入rsync安装包运行命令: ./configure --p ...
- 20175126《Java程序设计》第六周学习总结
# 20175126 2016-2017-2 <Java程序设计>第五周学习总结 ## 教材学习内容总结 - 本周学习方式主要为手动敲代码并理解内容学习. - 学习内容为教材第七章第十章, ...
- 从零开始学spring cloud(五) -------- 将服务注册到Eureka上
一.开发前准备工作: 官方文档地址:https://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/2.1.0.RELEASE/mul ...
- python_字符编码
一 了解字符编码的知识储备 1.计算机基础知识 2.电脑存放组成: 硬盘 - 内存 -(二级缓存.一级缓存.cpu寄存器)- cpu # cpu交互的是用户能识别的数据:字符# 硬盘中最终存储的数据: ...
- Falsk SqlAlchemy
pip install mysql-connector from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Fl ...