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的更多相关文章
随机推荐
- [Sw] Swoole-4.2.9 可以尝试愉快应用 Swoole 协程
大家知道 Swoole 提供了方便于服务器.网络编程的模式,简化了多进程编程. 这直接让 PHP 的运行很容易变成常驻内存的 Server 程序,执行效率上有了数倍的提升. 但是这一切还没有让人足够兴 ...
- JavaScript中面相对象OOP
方法 方法的原型链 <html> <head> <title></title> </head> <script type=" ...
- python入门(十):模块、包
模块:py文件包:目录,目录里面包含__init__.py,内容可以是空里面可以包含多个模块文件,还可以包含子包 1.模块和包,可以很方便的提供给其他程序以复用 1) 利于组织复杂工程 我们写代码的时 ...
- to_char与to_date的区别
select * from csend where credttm > to_date('2018-06-11','yyyy-mm-dd'); select * from csend where ...
- CDH5.15.1 hive 连接mongodb配置及增删改查
1. 下载 wget http://repo1.maven.org/maven2/org/mongodb/mongo-hadoop/mongo-hadoop-hive/2.0.2/mongo-hado ...
- BurpSuite抓HTTPS包
Burp Suite要抓HTTPS的包的话,是需要有Burp Suite的CA证书的 为什么要证书这里就不说了,下面是具体步骤 1.首先要把Burp Suite的CA证书下载到本地 Burp Suit ...
- windows搭建zabbix agent
1.下载和解压zabbix agent 地址: http://www.zabbix.com/downloads/2.4.4/zabbix_agents_2.4.4.win.zip解压:conf目录存放 ...
- 20175314 《Java程序设计》第八周学习总结
20175314 <Java程序设计>第八周学习总结 教材学习内容总结 安利一个非常实用的图片处理工具:图片工厂,它具有非常强大的图片批处理能力,比如加水印.降低画质.命名等,不仅如此它还 ...
- 返回 字符串的 form和js组合让页面跳转
router.get("/wy/jhy").handler(ctx->{ ctx.request().response().setChunked(true); System. ...
- TZOJ 2569 Wooden Fence(凸包求周长)
描述 Did you ever wonder what happens to your money when you deposit them to a bank account? All banks ...