一鼓作气 博客--第八篇 note8

 0、https://pymotw.com/3/index.html#python-3-module-of-the-week

1 、晓松奇谈 最新两集 匠心故事]
2、编程范式:
2.1 面向过程 top-down
2.2 函数式编程
2.3 面向对象
3、面向对象的优点:
3.1 更容易扩展
3.2 提高代码使用效率
3.3 组织性更清晰
3.4 更适合复杂项目开发
4、面向对象三大特性
4.1 封装 封装功能的实现细节 只暴露调用接口
4.2 继承
4.3 多态 接口继承
5、面向对象的概念
5.1 类----->模板
5.2 对象----->实例化类
5.3 属性
5.3.1 私有属性----->
5.3.2 共有属性----->
5.3.3 成员属性----->
5.4 方法----->函数
5.5 构造函数-----> 初始化类执行
5.6 析构函数----->实例被销毁 手动删除实例变量,或者程序结束
5.7 新式类----->广度优先
5.7.1 object----->
5.7.2 super(Myclass,self).__init__(...)
5.7.3 多继承继承路径----->广度优先
5.8 经典类-----> 深度优先
class Dog:
parent _class.__init__(self,...)
6、
8、报警python2 写法
import abc
class Alert(object):
__metaclass__ = abc.ABCMeta
def send(self):
pass
class MailAlert(Alert):
def send(self,msg):
print("--sending:",msg)
class SMSAlert(Alert):
pass
m= MailAlert()
m.send('hahah')
8.1 报警python3 写法 ABCHBP3.PY
class Alert(object):
def send(self):
raise NotImplementedError
class MailAlert(Alert):
def send(self,msg):
print("--sending:",msg)
class SMSAlert(Alert):
pass
m= MailAlert()
m.send('hahah')
import abc
 class Alert(object):
    '''报警基类'''
    __metaclass__ = abc.ABCMeta
 
    @abc.abstractmethod
    def send(self):
        '''报警消息发送接口'''
        pass
 
 
 
class MailAlert(Alert):
    pass
 
 
m = MailAlert()
m.send()
8、
9 没有调用静态方法之前
class Person(object):
def __init__(self,name):
self.name = name
def eat(self):
print(" %s is eating..."%self.name)
p= Person('haibao')
p.eat()
没有调用内存,使用完就释放
静态方法不能访问共有属性,也不能访问实例
@staticmethod
调用静态方法之一种实现方式:
class Person(object):
def __init__(self,name):
self.name = name
@staticmethod
def eat(self):
print(" %s is eating..."%self.name)
p= Person('haibao')
p.eat(p)
# 调用静态方法实现之二
class Person(object):
def __init__(self,name):
self.name = name
@staticmethod
def eat(name,food):
print(" %s is eating...%s"%(name,food))
p= Person('haibao')
Person.eat('haibao','baozi')
# 调用类方法实现之三
#静态方法即不能访问公有属性,也不能访问实例
class Person(object):
def __init__(self,name):
self.name = name
@staticmethod
def eat(name,food): #静态方法即不能访问公有属性,也不能访问实例
print(" %s is eating...%s"%(name,food))
# @classmethod
def walk(self):
print('%s is walking....'%self.name)
p= Person('haibao')
p.walk()
# 调用lei方法实现之four 类方法只能访问类的公有属性,不能访问实例属性
class Person(object):
name = 'rain'
def __init__(self, name):
self.name = name
# @staticmethod
def eat(name, food):
print(" %s is eating...%s" % (name, food))
@classmethod
def walk(self):
print('%s is walking....' % self.name)
p = Person('haibao')
p.walk()
# 调用lei方法实现之five
class Person(object):
name = 'rain'
def __init__(self, name):
self.name = name
# @staticmethod
def eat(name, food):
print(" %s is eating...%s" % (name, food))
@classmethod
def walk(self):
print('%s is walking....' % self.name)
@property
def talk(self):
print('%s says...'%(self.name))
p = Person('haibao')
p.talk
# 调用lei方法实现之six property parameter 's call func
class Person(object):
name = 'rain'
def __init__(self, name):
self.name = name
# @staticmethod
def eat(name, food):
print(" %s is eating...%s" % (name, food))
@classmethod
def walk(self):
print('%s is walking....' % self.name)
@property
def talk(self): # you can't use parameter
print('%s says.property..'%(self.name))
@talk.setter
def talk(self, msg): # parameter is callable
print("set msg:",msg)
p = Person('haibao')
p.talk
p.talk="property setter" #调用的是property.
# 调用lei方法实现之seven deleter property
class Person(object):
name = 'rain'
def __init__(self, name):
self.name = name
# @staticmethod
def eat(name, food):
print(" %s is eating...%s" % (name, food))
@classmethod
def walk(self):
print('%s is walking....' % self.name)
@property
def talk(self): # you can't use parameter
print('%s says.property..'%(self.name))
@talk.setter
def talk(self, msg): # parameter is callable
print("set msg:",msg)
@talk.deleter
def talk(self):
print('delete talk ....')
p = Person('haibao')
p.talk
p.talk="property setter" #调用的是property.
del p.talk
类方法只能访问类的公有属性,不能访问实例属性
@classmethod
@propertiy
属性方法是把静态方法变成一个变量
————
异常处理:
1、基本结构
while True:
try:
a1 = input('>>>')
a2 = input('>>>')
a1 = int(a1)
a2 = int(a2)
a3 = a1 + a2
print(a3)
except Exception as e:
print('pls input a number')
2、复杂结构
有报错,1,2, 3,4 不管是否报错,都最后执行finally
无报错,1,2,3,4,5 ,无报错,最后也执行finally
3、异常对象
4、错误类型
5、精确定位报错
# 异常种类
try:
int('iiiejie')
list = [222,222]
list[33]
except IndexError as e :
print('index error ')
except ValueError as e :
print('value error ')
except Exception as e :
print('error ')
print(e)
else:
print('ok')
finally:
print('final ')
6、主动触发异常
# 主动触发异常
def execute():
try:
result = foo1()
if result:
pass
else:
raise Exception('wrong way....')
foo2()
except Exception as e:
print(e)
hasattr(容器,‘名称’) # 以字符串的形式判断[某个对象]中是否含有指定的属性
server:
import socket
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(('0.0.0.0',8000))\
server.listen(10)
print('-----Get Ready to Transfer----')
conn,c_addr=server.accept()
file_list=['serverfile']
client:
import socket
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(('127.0.0.1',8001))
while True:
data = input('请输入上传文件,格式如get file1 or put file1')

 

Python中的绝对路劲和相对路径

1、绝对路径

 os.path.abspath("文件名"):

显示的是一个文件的绝对路劲

eg:

1
2
3
4
5
6
>>> import os
>>> os.chdir("E:\\PycharmProjects\\odycmdb\\odycmdb")
>>> os.listdir()
['settings.py''urls.py''wsgi.py''__init__.py''__pycache__']
>>> os.path.abspath("settings.py")
'E:\\PycharmProjects\\odycmdb\\odycmdb\\settings.py'

2、相对路径

os.path.dirname("文件名"):

显示的是一个文件的相对路径

eg:

1
2
3
4
5
6
>>> import os
>>> os.chdir("E:\\PycharmProjects\\odycmdb\\odycmdb")
>>> os.listdir()
['settings.py''urls.py''wsgi.py''__init__.py''__pycache__']
>>> os.path.dirname("settings.py")
''

 3、总结

一般情况下,绝对路劲函数和相对路径函数是结合起来用的,特别是在多个文件包之前相互导入

①os.path.dirname(os.path.abspath("文件名")): 表示获取当前文件夹的所在的目录

eg:

1
2
3
4
5
6
7
8
>>> import os
>>> os.chdir("E:\\PycharmProjects\\odycmdb\\odycmdb")
>>> os.listdir()
['settings.py''urls.py''wsgi.py''__init__.py''__pycache__']
>>> os.path.abspath("settings.py")
'E:\\PycharmProjects\\odycmdb\\odycmdb\\settings.py'
>>> os.path.dirname(os.path.abspath("settings.py"))
'E:\\PycharmProjects\\odycmdb\\odycmdb'

②os.path.dirname(os.path.dirname(os.path.abspath("文件名"))): 表示获取当前文件夹上一层目录

eg:

1
2
3
4
5
6
7
8
>>> import os
>>> os.chdir("E:\\PycharmProjects\\odycmdb\\odycmdb")
>>> os.listdir()
['settings.py''urls.py''wsgi.py''__init__.py''__pycache__']
>>> os.path.abspath("settings.py")
'E:\\PycharmProjects\\odycmdb\\odycmdb\\settings.py'
>>> os.path.dirname(os.path.dirname(os.path.abspath("settings.py")))
'E:\\PycharmProjects\\odycmdb'
posted @ 2016-12-03 07:27  HAIBAO5353  阅读(144)  评论(0)    收藏  举报