纸上得来终觉浅

Python学习笔记:类与对象、文件操作及错误处理
这篇博客记录了作者在Python学习过程中的尝试和错误,涉及到类的定义、实例化、属性使用,包括类属性和实例属性的区别。还涵盖了文件操作,如r+模式的读写,以及错误处理中的AttributeError。此外,文章还展示了随机数选择、列表和元组操作、字符串比较和os模块的文件遍历功能。

绝知此事要躬行

这是我自己的试错文档,Python学习中会遇到一些问题,有些小问题不行直接百度,不如自己直接写来试试

试错代码

import random
#
#
class animal:
     def __init__(self,type):
         self.type = type
         weight =123

         # if self.type == 'taiger':
             # weight =

 test= animal('2333')

#测试random.choice可同时作用列表或元祖。结果ok
 test1 = [1,2]
 test2 = (1,2)
 print(random.choice(test2))

#尝试在不定参内传入多个类,结果ok
 class test_num:
     def __init__(self,a):
         self.a = a

 class  forest:
     def __init__(self,count,*monster):
         print(type(monster))
         for i in monster:
             print(i)

 test2 = forest(1,test_num(1).a,test_num(2).a)

#测试类属性和实例属性
#1.类熟悉必须init或其他方法外
#2.实例属性必须以self来承接
#3.类属性可通过对象和类名调用
#4.实例属性不可通过类名调用
#5.类属性不可在实例后更改
 class soldier:
     soldier_name = '普通人'
     soldier_price = 100
     def __init__(self):
         self.soldier_hp_max = 100 - self.soldier_price
         self.soldier_hp_now = 100

 test = soldier()
 print(test.soldier_)

#测试空列表长度是否为0,很明显是的
dic1 = [] 
print(len(dic1))

#测试字符串是否能相等
 if 'sed' == 'sed':
     print('1')

#测试os文件遍历
#a是当前目录,b是文件列表,c是文件列表
import os
for a,b,c in os.walk(r'.\test8_class'):
    print(a,b,c,'\n')

#字符串不可以通过索引直接修改,可以用replace实现
 a = '12345'
 a[2] = '2'

#关于 string 的 replace 方法,需要注意 replace 不会改变原 string 的内容。
#str.replace 实际返回的是一个修改了匹配文案的str
 a= '12345'
 a.replace('1','2')
 print(a)

#r+模式,r+模式从开始读,读完光标在最后,所以写的表现形式看起来是追加,而不是覆盖
 with open('test_file.txt','r+',encoding='utf-8') as text:
     a1 = text.readlines()
     text.writelines(a1)
     print(a1)

报错处理

在这里插入图片描述
AttributeError:
解释:找不到对象里的这个属性。原因是代码内weight既不是实例属性也不是类属性。
实例属性需要self。类属性需要写在方法外

第1关:批量处理 300 学习内容 参考答案 记录 评论 任务描述 相关知识 批量操作 编程要求 测试说明 任务描述 本关任务:使用batch()方法整合不同方式的请求。 相关知识 批量操作 如果我们去查看HBaseAPI的源码会发现,在上次实训中我们使用的delete、get,put这些批量操作,实际上都是调用了batch()方法。 查看put(List<Put> puts)函数源码: 我们可以发现put(List<Put> puts)方法最终还是调用的batch(final List<? extends Row> actions, final Object[] results, int rpcTimeout),其他get和delete的批量操作也同样。 所以我们如果既有get操作又有Put操作那是不是可以整合在一起呢? 答案是肯定的。 我们来看个例子: List<Row> rows = new ArrayList<>(); //上传操作 Put put = new Put(Bytes.toBytes("row1")); put.addColumn(Bytes.toBytes("data"),Bytes.toBytes("2"), Bytes.toBytes("value1")); rows.add(put); //删除操作 Delete delete = new Delete(Bytes.toBytes("row1")); delete.addColumn(Bytes.toBytes("data"),Bytes.toBytes("1")); rows.add(delete); //获取操作 Get get = new Get(Bytes.toBytes("row1")); get.addColumn(Bytes.toBytes("data"),Bytes.toBytes("2")); rows.add(get); //定义结果数组长度 Object[] results = new Object[rows.size()]; table.batch(rows, results);//这是一个同步的操作,批量操作的结果将会在操作之后放在results中 for (Object object : results) { System.out.println(object.toString()); } 上述代码delete和put操作的结果为keyvalues=NONE,即没有结果,当然如果get操作没有获取到结果也会输出keyvalues=NONE。 有结果则会输出类似这样的数据:keyvalues={row1/data:1/1543220978519/Put/vlen=7/seqid=0} 是一个Result类型的对象。 值的注意的是:最好不要将put和delete操作放在同一个批处理的请求中,因为这样会有很大的风险。在学习多线程的时候我们学过多线程三大特性之一有序性,也许会因为其他原因导致操作的实现顺序不同,这样会产生不可预料的结果,还有就是资源竞争,会使结果波动。 上述使用的是同步的方式进行批量操作,其实API还提供了一个异步执行的方法table.batchCallback(actions, results, callback): batchCallback( final List<? extends Row> actions, final Object[] results, final Batch.Callback<R> callback) 在我们需要使用异步执行批量操作,并且想要获取异步执行结果的时候可以考虑使用batchCallback()方法,Batch.Callback<R> callback就是异步执行结果的监听器。 编程要求 得来终觉,我们来实际操练吧,在右侧编辑器begin-end处编写代码补全batchOp(String tablename) 函数,参数:tablename为待操作表的表名,要求实现如下操作: 删除表中行键为row1,row2的行; 获取表中行键为row3,row10的行; 四个操作需要依照以上先后顺序,即先删除在获取row3,row10。 不需要你直接输出,只需要将批量操作的执行结果作为返回值返回即可。 测试说明 需要你先启动Hadoop和HBase,并等待HBase初始化完成。 预期输出: Row:null Row:null keyvalues=NONE keyvalues=NONE value30 value100 开始你的任务吧,祝你成功!
11-22
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值