Python学习历程之面对对象浅识
# ===============================封装====================================
# class Bar:
# def __init__(self,name,age,content):
# self.name = name
# self.age = age
# self.content = content
# def foo(self):
# print(self.name,self.age,self.content)
# b = Bar('Join','18','上大学')
# b.foo() # ================================继承===================================
# -------------------单继承---------------------
# class fa():
# def eat(self):
# print("father is eating")
# def sleep(self):
# print("father is sleeping")
# def sing(self):
# print("father is singging")
#
# class so(fa):
# def school(self):
# print("son is going to school")
# def eat(self):
# print("son is eating")
# def sing(self):
# print("son is singging")
# def sleep(self):
# super(so,self).sleep()
# print("son is sleeping")
# s = so()
# s.school()
# s.sleep()
# s.eat()
# s.sing() # --------------------多继承 -----------------------
# class f1:
# def a(self):
# print("f1.a")
# class f2:
# def a(self):
# print("f2.a")
# class son(f2,f1):
# def a(self):
# super(son,self).a()
# print("s.b")
# s = son()
# s.a()
# 多继承时:
# 左侧优先
# 一条道走到黑
# 同一个根时,最后再访问根
# class BaseRequest():
# def __init__(self):
# print("BaseRequest.init()")
# class RequestHandler(BaseRequest):
# def __init__(self):
# print("RequestHandler.init")
# BaseRequest.__init__(self)
# def server_forver(self):
# print('RequestHandler.server_forever')
# self.process_request()
# def process_request(self):
# print('RequestHandler.process_request')
# class Minx:
# def __init__(self):
# print("Minx.init")
# def process_request(self):
# print('minx.process_request')
# class Son(Minx,RequestHandler):
# def __init__(self):
# print("Son.init()")
# pass
# obj = Son()
# obj.server_forver() # class Bar():
# con = 'son' # 类静态字段 直接类名就可以调用
# def __init__(self,name):
# self.name = name # 普通对象,需要对象调用
# def p(self):
# print(self.name)
# @staticmethod # 相当于模块对函数的封装
# def stat():
# print("Im starticmethod") # 保存在类中,直接可通过类名调用
# @classmethod
# def classmethod(cls):
# #cls 是类名
# print(cls)
# print("classmethod")
# @property
# def per(self):
# return 1
# @per.setter
# def per(self,val):
# self.name = val
# @per.getter
# def per(self):
# return self.name
# @per.deleter
# def per(self):
# self.name = ''
# b = Bar('teacher')
# b.con = "father"
# print(b.con)
# print(b.name)
# Bar.stat()
# Bar.classmethod()
# print(b.name)
# b.per = 'sdfsfsdfj'
# print(b.per)
# del b.per
# print(b.name) # 分页列表 # class Page:
# def __init__(self,val):
# try:
# page = int(val)
# except Exception as e:
# page = 1
# self.val = page
# @property
# def start(self):
# start = (self.val-1) * 10
# return start
# @property
# def end(self):
# end = self.val * 10
# return end
#
# li = []
# for i in range(1000):
# li.append(i)
#
# while True:
# ipt = input("请输入要查看的Page:")
# page = Page(ipt)
# print(li[page.start:page.end]) # ================ 成员修饰符 ======================
# -------------共有成员 与 私有成员
# class foo:
# def __init__(self):
# self.__name = ''
# self.name = ''
# @property
# def per(self):
# print(self.name)
# @per.setter
# def per(self,name):
# self.__name = name
# @per.getter
# def per(self):
# return self.__name
# @per.deleter
# def per(self):
# self.__name = ''
# def pname(self):
# print(self.__name)
#
# f = foo()
# f.per = '123'
# print(f.per)
# print(f.pname())
# del f.per
# print(f.pname()) # =======================特殊成员=========================
# __init__ 类()自动执行
# __call__ 对象() 类()() 自动执行
# __int__ int(对象)
# __str__ str(对象)
# __add__ + 返回值可以自定义
# __del__ 析构函数 对象被销毁时自动执行
# __dict__ 对对象的成员封装成字典返回
# __doc__ 模块注释
# __getitem__ 过的列表的元素
# __setitem__ 设置值
# __delitem__ 删除值
# def __call__(self,*args,**kwargs):
# class foo:
# def __init__(self):
# print('Init')
# def __call__(self, *args, **kwargs):
# print('call')
# obj = foo()
# obj() # 自动触发__call__()方法
# foo()() # class foo:
# def __init__(self,n,a):
# self.n = n
# self.a = a
# def __str__(self):
# return '%s-%s' % (self.n,self.a)
# f = foo('alex','18')
# print(f) # class foo:
# def __init__(self,name,age):
# self.name = name
# self.age = age
# def __add__(self, other):
# return 'xxoo'
# obj1 = foo('alex',19)
# obj2 = foo('eirc',66)
# r = obj1+obj2
# # 俩对象相加时,自动执行第一个对象的 __add__方法,并且将第二个对象作为参数传入
# print(r,type(r)) # ================== MetaClass===============================
# 创建类的几种方法
# class foo(object):
# def func(self):
# print("第一种创建方式")
# obj = foo()
# obj.func()
# foo1 = type('foo1',(object,),{'func': lambda x: '第二种创建方式'})
# obj = foo1()
# obj.func() # class MyType(type):
# def __init__(self,what,bases=None,dict=None):
# print("1 =======> MyType Init")
# super(MyType,self).__init__(what,bases,dict)
# # def __new__(cls, *args, **kwargs):
# # print("MyType New")
# def __call__(self, *args, **kwargs):
# print("2 =======> MyType Call")
# obj = self.__new__(self,*args, **kwargs)
# self.__init__(obj)
#
# class Foo(object,metaclass=MyType):
# def __init__(self):
# print("4 =======> Foo Init")
# def __new__(cls, *args, **kwargs):
# print("3 =======> Foo New")
# return object.__new__(cls, *args, **kwargs)
# # 第一阶段:解释器从上到下执行代码创建Foo类
# # 第二阶段:通过Foo类创建obj对象
# obj = Foo() # ======================异常捕获=========================
# def Foo(num):
# try:
# li = [1,2,3]
# print(li[num])
# if num > len(li):
# raise IndexError('现在已经有错误了')
# except IndexError as e:
# print('IndexError:',e)
# except ValueError as e:
# print('ValueError:',e)
# except Exception as e:
# print('Error:',e)
# else:
# print(li[:])
# finally:
# print(li)
# Foo(10) # ========================== 反射 ================================
# 通过字符串的形式操作对象成员
# class Foo:
# def __init__(self,name,age):
# self.name = name
# self.age = age
#
#
# obj = Foo('alex','18')
# obj.name
# b = 'name'
# print(obj.__dict__[b])
# ---------------------------------------
# getattr() 去什么里面获取什么东西
# setattr() 设置字段
# hasattr() 判断是否有字段
# delattr() 删除字段
# -------------------------------------------
# setattr(obj,'k1','v1')
# print(getattr(obj,b))
# print(getattr(obj,'k1'))
# delattr(obj,'k1')
# print(getattr(obj,'k1')) # ---------------------- 单例模式 ---------------------------
# class Foo:
# def __init__(self,name,age):
# self.name = name
# self.age = age
# def show(self):
# print(self.name,self.age)
# v = None
# while True:
# if v :
# v.show()
# else:
# v = Foo('alex',123)
# v.show()
# class Foo:
# __v = None
# def __init__(self):
# print('对象被创建了')
# @classmethod
# def get_instatnce(cls):
# print('单例模式创建对象')
# if cls.__v:
# return cls.__v
# else:
# cls.__v = Foo()
# return cls.__v
# obj = Foo.get_instatnce()
Python学习历程之面对对象浅识的更多相关文章
- 【Python学习笔记之二】浅谈Python的yield用法
在上篇[Python学习笔记之一]Python关键字及其总结中我提到了yield,本篇文章我将会重点说明yield的用法 在介绍yield前有必要先说明下Python中的迭代器(iterator)和生 ...
- Python学习笔记之类与对象
这篇文章介绍有关 Python 类中一些常被大家忽略的知识点,帮助大家更全面的掌握 Python 中类的使用技巧 1.与类和对象相关的内置方法 issubclass(class, classinfo) ...
- python学习笔记4(对象/引用;多范式; 上下文管理器)
### Python的强大很大一部分原因在于,它提供有很多已经写好的,可以现成用的对象 21. 动态类型:对象/引用 对象和引用: 对象是储存在内存中的实体,对象名只是指向这一对象的引用(refere ...
- Python学习历程之模块浅识
# =============================操作系统模块=======================# import os# 待续# ======================= ...
- 《转》python学习(4)对象
转自http://www.cnblogs.com/BeginMan/p/3160044.html 一.学习目录 1.pyhton对象 2.python类型 3.类型操作符与内建函数 4.类型工厂函数 ...
- 记录我的 python 学习历程-Day05 字典/字典的嵌套
一.字典的初识 为什么要有字典 字典与列表同属容器型数据类型,同样可以存储大量的数据,但是,列表的数据关联性不强,并且查询速度比较慢,只能按照顺序存储. 什么是字典 先说一下什么叫可变与不可变的数据类 ...
- 记录我的 python 学习历程-Day06 is id == / 代码块 / 集合 / 深浅拷贝
一.is == id 用法 在Python中,id是内存地址, 你只要创建一个数据(对象)那么就会在内存中开辟一个空间,将这个数据临时加载到内存中,这个空间有一个唯一标识,就好比是身份证号,标识这个空 ...
- 记录我的 python 学习历程-Day13 匿名函数、内置函数 II、闭包
一.匿名函数 以后面试或者工作中经常用匿名函数 lambda,也叫一句话函数. 课上练习: # 正常函数: def func(a, b): return a + b print(func(4, 6)) ...
- (Python学习4)List对象
1.PyListObject对象 typedef struct { PyObject_VAR_HEAD PyObject **ob_item; Py_ssize_t allocated; } PyLi ...
随机推荐
- Devexpress PdfViewer预览pdf,禁止下载,打印,复制
PDFviewer控件: 参数设置: 1.屏蔽书签栏和右键菜单 2.加载文档支持路径以及流stream加载的方式 pdfViewer.MenuManager.DisposeManager(); pdf ...
- Python编程Web框架 :Django 从入门到精通
Django是一个高级别的Python Web框架,它鼓励快速开发和干净实用的设计. 现在我们开始学习它. Django学习之 第一章:Django介绍 Django学习之 第二章:Django快速上 ...
- 基于ACE的TAO开发---一个简单的入门实例-----VS2008(二)
上一节已经说了如何编译idl文件.现在就用编好的文件来写一个最小的corba小程序的.程序分为服务器程序和客户端程序. 说明下,代码是<基于C++CORBA高级编程>一书中的例子. 1.首 ...
- otool -l 可执行文件结构
otool -l /Users/zzf073/Desktop/FqlMerchantX /Users/zzf073/Desktop/FqlMerchantX: Mach header magic cp ...
- C# 重命名文件方法
. //重命名文件 // 改名方法 FileInfo fi = new FileInfo("旧路径"); //xx/xx/aa.rar fi.MoveTo("新路径&qu ...
- SciSharpCube:容器中的SciSharp,.NET机器学习开箱即用
SciSharp Cube 在Docker容器中快速体验SciSharp机器学习工具的最新功能. 项目地址:https://github.com/SciSharp/SciSharpCube 从Dock ...
- [POI2005]AUT-The Bus 树状数组维护最大前缀和
#include<cstdio> #include<algorithm> using namespace std; const int N=100000+3; int x[N] ...
- SpringBoot事务注解详解
@Transactional spring 事务注解 1.简单开启事务管理 @EnableTransactionManagement // 启注解事务管理,等同于xml配置方式的 <tx:ann ...
- windows系统下jenkins环境搭建与基本使用
一. windows 系统下搭建jenkins环境 1.1 jenkins环境搭建和构建job流程图 1.2 安装jdk JDK下载地址: http://www.oracle.com/technet ...
- Vue学习之路第十九篇:按键修饰符的使用
1.我们工作中经常会有类似于这样的需求:按下Enter键触发某个事件.或者按下ESC退出页面等各种各样的场景.在Vue中,可以通过键盘修饰符来实现这样的场景. 2.事例代码: <body> ...