• 多继承:
    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的更多相关文章

随机推荐

  1. CSS 图像高级 Css Sprites

    上节课中我们学习了背景图像,这节课我们学习背景图像的高级知识,如Css Sprites,CSS 背景渐变等. Css Sprites Css Sprites,国内也叫CSS精灵.它的原理是将许多的小图 ...

  2. 【JavaScript】EasyUIのForm的跨域提交问题解析

    昨日.プログラムを作るとき.一つの問題がありますが.皆に共有します. [問題] EasyUIのFormでURLを請求するとき.返却の値が取得できない. [ソース] var fnRegUser = fu ...

  3. View控件跟随鼠标移动

    public boolean onTouch(View view, MotionEvent motionEvent) { if(motionEvent.getAction() == MotionEve ...

  4. atlium designer 我画的pcb板到出元件清单, 里面显示 Board Stack Report

    1. 2.去掉选项即可 板的问题,在导出原件清单时,有一个模板选项,如果有,你就把他去掉,变成空白的,我的选上就是你的那种出错效果,去掉就好了.

  5. CentOS7+CDH5.14.0安装CDH错误排查:Hue错误: Load Balancer 该角色的进程启动失败

    Hue错误: Load Balancer 该角色的进程启动失败 解决办法:主机能够联网情况下,直接运行如下命令即可在线安装openssl.httpd 需要提前安装环境  httpd, mod_ssl ...

  6. hive上传数据到oracle

    # Oracle 建立hive外部表 使用oracle的大数据连接器向建立hive的外部表,在通过在oracle中根据外部表建立内部表(create table as select * from ex ...

  7. 安装mysql后,sql语句中表名区分大小写的问题

    今天安装完mysql后,执行查询语句select * from user,结果报user表不存在,但是实际是存在的,查了一下才知道是因为mysql的my.cnf文件中少了一个大小写敏感的配置,若不配置 ...

  8. python实现随机森林、逻辑回归和朴素贝叶斯的新闻文本分类

    实现本文的文本数据可以在THUCTC下载也可以自己手动爬虫生成, 本文主要参考:https://blog.csdn.net/hao5335156/article/details/82716923 nb ...

  9. EL表达式、JSTL标签库

    一.EL(Expression Language)表达式 语法结构:${var} 若要停用对EL表达式的评估的话,需要使用page指令将isELIgnored属性值设为true: <%@ pag ...

  10. python数据库进阶

    第1节 MySQL基础 一,说明 1,认识MySQL与创建用户 MySQL是最流行的关系型数据库管理系统之一,由瑞典MySQL AB公司开发,目前属于Oracle公司.MySQL是一种关联数据管理系统 ...