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的更多相关文章
随机推荐
- 让anujs支持rc-select
git clone git@github.com:react-component/select.git cd select npm i babel-plugin-antd --save-dev npm ...
- C#使用List实现类似RadioButtonGroup的单选功能
首先说说需求,有多种不同类型的UserControl用于以不同的方式显示数据,想通过在另一个view中实现某种点击选中按钮后,在数据显示view中,只让被逻辑关联的UserControl显示(Visi ...
- Jmeter软件介绍
1.软件结构 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域. 它可以用于测试静态和动态资 ...
- elasticsearch批量修改,批量更新某个字段
1.源生API 在这里没有用官方提供的bulk API,而是用的另外一种方式. POST /infomations/infomations/_update_by_query JSON请求格式 { &q ...
- git--创建空的分支
背景:项目进行中,需要创建一个空分支.在Git中创建分支,是必须有一个父节点的,也就是说必须在已有的分支上来创建新的分支,如果你的工程已经进行了一段时间,这个时候是无法创建空分支的. 解决方法: 使用 ...
- for循环 && for-each
Effective Java 第46条for-each循环优先于传统for循环 问题: 使用for循环来遍历集合或者是数组可以借助迭代器和索引变量.但是,如果出现循环嵌套的时候很容易引起混乱. 例如: ...
- TestNG实现用例运行失败自动截图(转载)
转载自:https://blog.csdn.net/galen2016/article/details/70193684 重写Listener的onTestFailure方法 package com. ...
- html初识form表单
定义和用法 <form> 标签用于为用户输入创建 HTML 表单. 表单能够包含 input 元素,比如文本字段.复选框.单选框.提交按钮等等. 表单用于向服务器传输数据.通过submit ...
- python异常捕捉以及处理
看标题觉得高大上,好像能处理所有的异常.但是,事实是只能按照字面的意思来理解这一段话. 众所周知写代码哪有不出bug的? 那么出现了bug 我们不想让程序因为bug的存在而退出.那么要怎么做呢? 今天 ...
- Unity Awards 2018最佳资源
好的工具与资源,将帮助你的开发,达到事办功倍,今天我们将为大家介绍荣获Unity Awards 2018最佳资源的获奖作品. 最佳艺术工具:Aura - Volumetric Lighting Aur ...