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_判断文件是否写入完成
/** * 等待文件(非目录)读写完毕,费时的操作,不要放在主线程 * * @param file 文件 */ private void waitForWirtenCompleted(File fil ...
- java将一个List赋值给另一个List
声明和实例化: 声明:ArrayList a, 仅仅只是声明了一个list变量,其未来作用相当于C++中的引用变量,亦或者相当于一个对象块的索引,但并未为其分配具体的完整的对象所需要的内存空间,其所分 ...
- day51 JS基础
复习 1.字体图标 用i标签, 设置类名, 与第三方字体图标库进行图标匹配 <link rel="stylesheet" href="font-awesome-4. ...
- python--第二十天总结(Django的一些注意)
关闭Django模板的自动转义 Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全.但是有的时候我们可能不希望这些HTML元素 被转义,比如我们做一个内容管 ...
- innodb 体系结构(后台进程)
一.后台进程(innodb 1.0.x以前的) 1.master thread master thread具有最高的线程优先级别,其内部由多个循环(loop)组成:主循环(loop).后台循环(bac ...
- 2018-2019-2 20165315《网络攻防技术》Exp6 信息搜集与漏洞扫描
2018-2019-2 20165315<网络攻防技术>Exp6 信息搜集与漏洞扫描 目录 一.实验内容 二.实验步骤 1.各种搜索技巧的应用 2.DNS IP注册信息的查询 3.基本的扫 ...
- centos 7 上Hive-2.1.1的安装与基本操作
首先安装mysql 1. 在线安装mysql a) yum install mysql b) yum install mysql-devel c) ...
- django settings配置文件ALLOWED_HOSTS
ALLOWED_HOSTS列表为了防止黑客入侵,只允许列表中的ip地址访问 填写上“*”可以使所有的网址都能访问Django项目了,项目测试的时候,可以这么做.这样就失去了保护
- 爬取qq号
import reimport urllib.requestimport osimport jsonimport sslfrom collections import deque #把爬去的数据保存到 ...
- 国内最火的10款Java开源项目,都是国人开发,CMS居多
原文链接:https://www.cnblogs.com/jimcsharp/p/8266954.html 国内的开源环境已经相当好,但是国内开发注重是应用,创新有但不多,从榜单可以看出,专门搞技术的 ...