首页 > 代码库 > Python面向对象编程(四)
Python面向对象编程(四)
1.多态
多态的概念虽然现在才说,但是我们一直在用。多态就是多种形态的意思,动物都猫,狗,猪等等,这些都是动物的多种形态。
反映在Python中,多态就意味着就算不知道变量所引用的对象类型是什么,也能对它进行操作。比如序列类型有计算长度的方法len(),那我们拿到一个序列类型x,我们不需要知道x是什么类型,只需要知道它是序列类型,那我们就可以用len(x)的方法计算x的长度。这就是多态性
当然我们学过一个内置函数isinstance(),可以用它来判断数据类型,但是这可不符合多态优美的特性
2.绑定方法与非绑定方法
类里面定义的函数有两种,绑定方法和非绑定方法
1)绑定方法
绑定方法又分为绑定给类的方法和绑定给对象用的方法。
凡是定义在类中,且没有被任何装饰器修饰的方法,都是绑定给对象用的方法。
特点是obj.func()会自动把obj当作第一个参数传入,因为func的逻辑就是要处理obj
在类中定义的被classmethod装饰器修饰的方法,就是绑定给类的方法
特点是cls.func()会自动把类cls当作第一个参数传入,因为func的逻辑是处理cls,就算是对象调用这个函数,也是把类当成第一个参数传入
class People: def __init__(self,name): self.name=name def bar(self): print(‘----->‘,self.name) @classmethod def func(cls): print(cls) p1=People(‘zhang‘) p1.func() #<class ‘__main__.People‘> People.func()#<class ‘__main__.People‘>
2)非绑定方法
还有一种方法是既不绑定给类,也不绑定给对象的,叫做非绑定方法
用staticmethod装饰器装饰
#文件名:pickle_test import hashlib import time import pickle import os student_path=r‘C:\Users\Administrator\PycharmProjects\python5期\day22\student‘ class People: def __init__(self,name,sex,user_id): self.name=name self.sex=sex self.user_id=user_id self.id = self.create_id() def tell_info(self): print(‘‘‘ --------%s info-------- id:%s name:%s sex:%s user_id:%s ‘‘‘ %(self.name,self.id,self.name,self.sex,self.user_id)) def create_id(self): m=hashlib.md5() m.update(self.name.encode(‘utf-8‘)) m.update(self.sex.encode(‘utf-8‘)) m.update(str(self.user_id).encode(‘utf-8‘)) return m.hexdigest() def save(self): with open(self.id,‘wb‘) as f: pickle.dump(self,f) @staticmethod #非绑定方法,就是一个函数,就是一个工具而已,不需要类,也不需对象 def get_all(): res = os.listdir(student_path) for item in res: file_path=r‘%s\%s‘ %(student_path,item) with open(file_path,‘rb‘) as f: obj=pickle.load(f) obj.tell_info() #反序列化.py from pickle_test import People p=People(‘egon‘,‘male‘,123123123) p.get_all()
3.软件开发规范
在真正的软件开发过程中,并不是把所有代码写在一个文件中的,可以想象一下,一个小程序大概有10000行代码,都写在一个文件中的话,你还干这行吗?
正确的方式应该是把程序拆成一个一个模块。比如常用的bin目录放可执行文件,conf目录放配置文件
db目录放数据,log目录放日志文件,lib目录放库,src目录放一些重要的代码,比如重要的逻辑,类的定义等
Python面向对象编程(四)