python_day25_私有变量(在变量前加两个下划线即可)_私有方法_静态方法_

#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 晚




原文地址:https://www.cnblogs.com/YiYA-blog/p/9859118.html