本周内容总结
派生方法的实战总结
# json 模块只能序列化指定的数据类型 而且要求数据类型的内部也要是指定的数据类型
这时候就可以看出派生的方法的重要性
代码实现:
class MyJsonEncoder(json.JsonEncoder):
def default(self,o):
'''
:param o: 接收无法被序列化的数据
:return: 返回可以被序列化的数据
'''
if isinstance(o,datetime.datetime): # 判断是否是datetime类型 如果是久处理成可被序列的类型
return o.strftime(%Y-%m-%d %X)
elif isinstance(o,datetime.date):
return o.strftime(%Y-%m-%d)
return super().default(o) # 最后调用原来的方法 这样就防止了一些额外操作没有做
res = json.dumps(d,cls = MyJsonEncoder)
print
'''
使用继承的方法来做到拦截操作 然后经过处理后再将数据返回
'''
面向对象三大特征之封装
封装:就是将数据和功能全部'隐藏'起来
隐藏:将数据和功能隐藏起来让用户无法直接获取使用 而是通过开放的窗口调用
伪装:将类里边的方法伪装成数据值
'''
使用类中的方法(函数)需要点函数命名加括号的形式但经过伪装的处理可以不需要括号也可以使用
'''
class MyCalss:
school_name = '清华大学'
_ = 'hhh'
__age = 99
# 类在定义阶段 变量名如果是两个下划线 那么就会被隐藏 在类外无法直接被调用
# 这种隐藏并不是正在意义上的隐藏 仅仅是换了一个名字
obj = MyClass()
obj.__name = 'aaa' # 无法被隐藏 只有在类定义阶段才行
'''
如果我们使用MyClass.__dict__的方式可以查看到隐藏了的
再使用print(MyClass._MyClass__age)
所以并不是真正的被隐藏了
因为无法做到真正的隐藏所以在类的定义阶段如果代码中有下划线开头的变量名或者是方法我们就不要直接去使用了 而是去找下面可能定义的接口
'''
伪装
# 将类里边的方法伪装成数据值
代码实现:
class Person(object):
def __init__(self,name,hegiht,weight):
self.name = name
self.hegiht = height
self.weight = weight
@prperty
def BMI(self):
return self.weight/(self.hegiht ** 2)
p1 = Person('aaa', 180, 160)
没有伪装:p1.BMI()
利用@prperty
就可以直接点出来
print(self.BMI)
面向对象三大特征之多态
#多态:多态就是一种事物的多种表达形态
例如水有固态 气态 液态
class Anmimal:
pass
class Cat(Anmimal):
def miao():
print('喵喵喵')
class Dog(Anmimal):
def wang():
print('汪汪汪')
# 但在作为动物 他们都会叫
'''
面向对象多条的意思是 一种事物可以有多种形态但是针对相同的功能应该有定义相同方法
这样无论我们拿到的具体是哪个具体的事物 都可以通过相同的方法调用功能
'''
class Anmimal:
def spark(self):
#叫的方式
pass
class Cat(Anmimal):
def spark(self):
print('喵喵喵')
意义:
假设我们使用相同的功能去操作不同类型的数据 就可以节省代码
eg:
l1 = [1,2,3]
s1 = '123'
d1 = {'1':0,'2':2}
print(l1.__len__)
print(s1.__len__)
print(d1.__len__)
面对不同数据类型的数据 我们就可以使用相同的方法来计算
'''
鸭子类型
标签:__,name,self,w7,print,class,def
From: https://www.cnblogs.com/xiaochenxiangchangpang/p/16884193.html