将数据、变量、函数封装到一个类中的过程就是类的封装。但也不是什么都要封装进类,类也有其独特的属性,
而不是什么数据、什么变量、什么函数都往里面塞;
class Animal: def bark(self): print("独有的叫声") def chi(self): print("吃") def he(self): print("喝") def la(self): print("拉") def sa(self): print("撒") def sleep(self): print("睡")
class People: def say(self): print("独有的说话交流能力") def chi(self): print("吃") def he(self): print("喝") def la(self): print("拉") def sa(self): print("撒") def sleep(self): print("睡")
import hashlib # md5加密一个字符串 hashlib_obj = hashlib.md5() hashlib_obj.update("123456") result = hashlib_obj.hexdigest()
上面是单独写在一个模块里,自上而下的就会自动的去执行
# 使用函数 import hashlib def md5(origin): hashlib_obj = hashlib.md5() hashlib_obj.update(origin) result = hashlib_obj.hexdigest() return result
上面是写在一个模块里的函数里,加入别的地方也要进行使用,便进行导入该模块; 但是如果此模块写了各种各样的处理各种事情的函数时,不能够清晰的知道需要导入这个模块里的哪个函数;
如果我们定义一个字符串处理类,专门用于处理字符串异类的操作的。是不是以后有字符串相关操作的,都可以 到这里面来找;而且方向很明确,而不是在一个模块里存在各种各样的去找。
import hashlib class StrUtil: @staticmethod def md5(origin): hashlib_obj = hashlib.md5() hashlib_obj.update(origin) result = hashlib_obj.hexdigest() return result
封装的主要体现在实例化函数后的一系列操作
class Student: def __init__(self, name, age): self.name = name self.age = age stu = Student("学生1", 18)
__init__
初始化函数,会在类进行实例化时自动执行;但是这并不是python中的构造函数,执行 __init__
方法,默认会将创建的那个块区域的内存地址当self参数传递进去
__new__(cls, *args, **kwargs)
这个才是python的构造函数
__getattr__
获取类中的属性,快捷方法有getattr()
__setattr__
设置类中的属性,快捷方法有setattr()
self
,类中的方法需要由这个类的对象来触发执行(对象.方法名),且在执行时会自动将对象当做参数传递给self
, 以供方法获取对象中已封装的值。
除了self默认参数外,其他都与函数的定义和执行时一样的
__init__
初始化方法在对象中封装一些数据,便于以后调用。