#Author:'haijing'
#date:2018/10/25

#————————私有变量(私有字段)————————#
# class Foo:
#     def __init__(self,name,age):
#         self.name = name
#         self.age = age
#         self.__age = age  #私有的字段,不能通过obj.__age访问 注意是两个下划线
#     def show(self):
#         return self.__age
#
# obj=Foo('haijing',18)
# print(obj.name)
# print(obj.age)
# # print(obj.__age)  #这一行会报错,没有权限看到而已
# print(obj.show())  #间接方法就可以了

#————————私有变量+静态方法————————#
# class Foo:
#     __v = 22  # 静态变量 可以通过类名访问也可以通过对象名访问,就是在字段(变量)前边加上两个下划线
#     def __index__(self):
#         pass
#     def show(self):
#         return Foo.__v  #这里刚刚写成 self.__v导致出错
#     @staticmethod
#     def sta_show():  #静态字段
#         return Foo.__v
# ret = Foo().show()  #这里也必须写成Foo()的形式,表示创建对象
# print(ret)
#
# ret = Foo.sta_show()  #这里是在调用静态方法,故Foo不用加括号
# print(ret)

#————————私有方法+静态方法————————#
# class Foo:
#     def __f1(self):  #私有方法 就是在方法前边加上两个下划线
#         return 123
#     def show(self):
#         r = self.__f1()
#         return r
# obj = Foo()


# # ret = obj.__f1()  # 这里就不可以直接访问了,会报错
# # print(ret)
# ret=obj.show()  #间接的去访问私有方法
# print(ret)
# 可以写出来想不想让别人看到的代码

#----------------应用----------------#
# class F:
#     def __init__(self):
#         self.name='haijing'
#         print(self.name)
#
# class S(F):       #会默认执行一遍F类中的__init__(self)方法
#     def __init__(self,name,age):
#         self.name = name
#         self.__age = age
#         super(S,self).__init__() #去访问类F中的__index__()方法
#         # F().__init__()  #去访问类F中的__index__()方法
#     def show(self):
#         print(self.name)
#         print(self.__age)
#
# s = S('min',18)
# s.show()

#-----特殊语句__call__(self, *args, **kwargs),对象后面有可以加括号并执行------#
# class Foo:
#     def __init__(self):
#         print('__init__()')
#     #特殊方法 用特殊语句去执行 特殊语句有对象构成
#     def __call__(self, *args, **kwargs):  #如果对象后面加两个括号,那么自动执行这一个方法内的语句
#         print('call')
#
# obj = Foo()  #类后面加括号自动执行__init__()方法
# obj()  #特殊的语句,用特殊的方法去执行,对象后面也加括号,自动去执行__call__()内的语句

# #-----特殊语句__int__(self),自己去创建变量强制转换,现在是和对象相互配合使用------#
#
# s='123'  #也可以用s = str('123')
# i = int(s)  #以前用的int方法是python去给创建的,现在自己去在类中创建int方法
#
# class Foo:
#     def __init__(self):
#         pass
#     def __int__(self):  #特殊方法
#         return 111
#
# obj = Foo()
# ret = int(obj)  #int+对象,那么去自动执行自己写的__int__(self)特殊方法
# print(ret,type(ret))  #打印111 <class 'int'>

#-----特殊方法__str__(self),自己去创建变量强制转换,现在是和对象相互配合使用------#
# class Foo:
#     def __init__(self):
#         pass
#     def __str__(self):  #特殊方法
#         return 'haijing'  #注意这里返回的必须是字符串  *****
#
# obj = Foo()
# ret = str(obj) #int+对象,那么去自动执行自己写的__str__(self)特殊方法,特殊语句用特殊方法去执行
# print(ret,type(ret))  #打印haijing <class 'str'>

#----------------特殊方法和特殊语句的应用,用的比较多的场景----------------#
# class Foo:
#     def __init__(self,name,age):
#         self.name =name
#         self.age = age
#     def __str__(self):  #第112行
#         return '%s-%s'%(self.name,self.age)  #为占位符
# obj = Foo('hiajing',18)
# print(obj)    #在内部经过实际执行 print(str(obj))
# #在执行print函数的时候在内部会自动的执行python内部的__str__()方法,
# #只不过这里自己定义了__str__()方法
# #所以会去执行自己定义的__str__()方法
# #所以print(obj) 会转去112行去执行函数

昨天的,由于时间紧,就没有更新博客,昨晚应该是在给世界处理恒电位仪收集到的数据
haijing in HZ
2018.10.26 晚