面向对象特征:封装,继承,多态
多态指:同一消息不同人给出的反应不同,比如程序员和HR的工作就是不同
,但是他们都是在工作,工作的内容不同
__repr__:程序员看简易的对象用的,控制台写对象
__str__:让普通用户看的更直白一些,打印
__del__:删除对象执行
class Book:
count = 0
#初始化对象的时候调用
def __init__(self,title,price = '0.0',author = None):
self.title = title
self.price = price
self.author = author
Book.count += 1
#删除对象的时候执行
def __del__(self):
Book.count -= 1
#在控制台打印该对象的时候执行
def __repr__(self):
return '[图书:{} ,定价:{}]'.format(self.title,self.price)
def print_info(self):
print( self.title, self.price,self.author)
if __name__ == '__main__':
book = Book('Python经典',price = 29.0,author = 'Tom')
book2 = Book('Flask')
book3 = Book('ASP.net')
#现在删除一本图书
del(book3)
print('图书的数量:{}'.format(Book.count))
全局count 可以放在self 外面但是还在Book内
def static_method(): 静态函数逻辑上与实例无关
import datetime
class Department:
def __init__(self,department,phone,manager):
self.department=department
self.phone=phone
self.manager=manager
def __repr__(self):
return '部门:{}'.format(self.department)
class Employee:
def __init__(self,department,name,birthday,salary):
self.department=department
self.name=name
self.birthday=birthday
self.salary=salary
@property
def age(self):
return datetime.date.today().year-self.birthday.year
def give_raise(self,percent,bonus=.0):
self.salary=self.salary*(1+percent+bonus) #增加百分比+奖金
def __repr__(self):
return '<员工:{}>'.format(self.name)
def working(self):
print('员工:{},在工作....'.format(self.name))
class Programer(Employee):
def __init__(self,department,name,birthday,salary,specialty,project):
super().__init__(department,name,birthday,salary)
self.specialty=specialty
self.project=project
def working(self):
print('程序员:{}在开发项目:{}...'.format(self.name,self.project))
if __name__ =='__main__':
dep = Department('技术部','024-123456','张大大')
p = Programer(dep,'Peter',datetime.date(1990,3,1,),8000,'Python','CRM')
print(p.department)
print(p.salary)
p.give_raise(.2,.1)
print(p.salary)
print(p.department.phone)
@property的就是一个属性,它将下面的函数解析成为一个属性来用, 运用的时候直接像是使用变量就行了
错误类型:
排除错误的方式-----异常处理:
try:
x = 5 / 0
print(x)
except ZeroDivisionError as e:
print('不能除零',e)
except:
print('其他异常')
else:
print('没有异常')
finally: #中间不管有没有遇到异常,都会执行的
print('中间不管有没有遇到异常,都会执行的')
异常处理测试
写类
class Coder:
def __init__(self,name):
self.name = name
self.skills=[]
def mastering_skill(self,skill):
self.skills.append(skill)
def show_skill(self):
print('掌握技能:')
for skill in self.skills:
print('-',skill)
c=Coder('Tom')
c.mastering_skill('Python')
c.mastering_skill('C#')
c.show_skill()
测试类
import unittest
from coder import Coder
class CoderTestCase(unittest.TestCase):
def test_skill_in(self):
c=Coder('Tom')
c.mastering_skill('Python')
c.mastering_skill('ASP.NET MVC')
self.assertIn('Python',c.skills)
if __name__=='__main__':
unittest.main()
类
def get_formatted_name(first,last):
full_name = '{} {}'.format(first,last)
return full_name.title()
print(get_formatted_name('tom','lee'))
测试类
import unittest
from Day09Study.test import get_formatted_name
class NameTstCase(unittest.TestCase):
def test_title_name(self): # 名字已test_下划线开头
formatted_name = get_formatted_name('tom','lee')
self.assertEqual(formatted_name,'Tom Lee')
if __name__ == '__main__':
unittest.main()
判断结果是否相等
断言测试两值是否相等
#单元测试
import unittest
def add(a,b):
return a+b
class MyTest(unittest.TestCase):
def test_add(self):
self.assertEqual(8,add(5,3))
if __name__ == '__main__':
unittest.main()
代码组织---断言
import unittest
# 单元测试 断言方法
person={'name':'Mike','age':20}
numbers=[1,3,2,88,7,44]
s='优品课堂 codeclassroom.com'
class TestAssert(unittest.TestCase):
def test_assert_method(self):
#self.assertEqual('Mike',person.get('name')) 相等
#self.assertTrue('优品课堂'in s) 是否为真
#self.assertIn('优品课堂', s) 是否包含
#self.assertAlmostEqual(3.3,1.1+2.2) 是否约等
#self.assertIs(True+1,2) 是否同引用
#self.assertIsNone(person.get('Name',None)) 是否为空
#self.assertIsInstance(numbers[0],int) 是否为同类型
#self.assertGreater(7,numbers[0]) 是否大于
if __name__=='__main__':
unittest.main()
装置
类
#计算器
class Calulator:
def __init__(self,x,y):
self.x=x
self.y=y
def add(self):
return self.x+self.y
def subtract(self):
return self.x-self.y
if __name__ =='__main__':
c=Calulator(5,3)
print(c.add())
print(c.subtract())
测试
import unittest
from calculator import Calulator
class CalculatorTest(unittest.TestCase):
def setUp(self): #把c=Calulator(5,3)这个类 放到刚开始准备工作内
self.c=Calulator(5,3) #Calulator类构造 5,3 ,好处是下面不用再构造c=Calulator(5,3)这个类啦
def test_add(self):
# c=Calulator(5,3)
self.assertEqual(8,self.c.add())
def test_subtract(self):
# c=Calulator(5,3)
self.assertEqual(2,self.c.subtract())
def tearDown(self): #关闭连接 语句 测试完事之后 清除内存
del self.c
if __name__ == '__main__':
unittest.main()