python大数据 pycharm中的面向对象-文件读写-异常

一、继承

# 类的定义 
# 旧式类定义 一般在定义单个类时使用
class 类名:
    name = None
    
   	def func(self):
        pass

# 新式类定义   一般在继承时使用
class 类名(指定需要继承的类):
    name = None
    
    def func(self):
        pass

# 新式类定义
class A():
    name = '张三'

    def func(self):
        # pass 不做处理
        pass
# 旧式类
class B:

    age = 20

    def fucn(self):
        pass


print(A.name)
print(B.age)

1-1 单继承

# 单继承  只继承一个类
class Father:

    gender = '男'

    def run(self):
        print('跑步很快')



# 子类继承父类获取父类中属性和方法
class Son(Father):

    # 定义子类的属性和方法
    age = 20

    def play(self):
        print('玩游戏')

        
# 创建子类对象
s = Son()
# 使用子类对象操作父类的属性和方法以及自己的属性和方法
print(s.gender)
print(s.age)

s.run()
s.play()

# 单继承的使用
class Master:
    name = '师父'

    def flapjack(self):
        print('摊鸡蛋煎饼')



class Apprentice(Master):
    # 子类继承后可以不定义属性和方法,直接使用父类的方法
    pass


a = Apprentice()

# 子类使用父类方法
a.flapjack()

1-2 多继承

# 单继承的使用
class Master:
    name = '师父'

    def flapjack(self):
        print('摊鸡蛋煎饼')


class School:

    name = '学校'

    def flapjack(self):
        print('摊肉肠煎饼')


class Apprentice(Master,School):
    # 子类继承后可以不定义属性和方法,直接使用父类的方法

    pass


a = Apprentice()

# 子类使用父类方法
a.flapjack()

# 查看子类的继承父类顺序
print(Apprentice.__mro__)

1-3 方法重写

# 重写父类方法  子类继承父类后定义了一个和父类相同名字的方法

# 单继承的使用
class Master:
    name = '师父'

    def flapjack(self):
        print('摊鸡蛋煎饼')


class Apprentice(Master):

    # 子类中定义了自己方法,和父类方法名一样
    # 子类相当于重写了父类的方法,在执行时按照子类的逻辑执行
    def flapjack(self):
        print('摊手抓饼')


a = Apprentice()
a.flapjack()

1-4 多层继承

# 多层继承
# 重写父类方法  子类继承父类后定义了一个和父类相同名字的方法

# 单继承的使用
class Master:
    name = '师父'
    def flapjack(self):
        print('摊鸡蛋煎饼')


class Apprentice(Master):
    name = '徒弟'
    def flapjack(self):
        print('摊手抓饼')
        super().flapjack()



class LittleApprentice(Apprentice):
    name = '小弟'

    def flapjack(self):
        print('蒸包子')
        super().flapjack()
        

# 创建对象
la = LittleApprentice()
la.flapjack()

print(LittleApprentice.__mro__)
# 多层继承
# 重写父类方法  子类继承父类后定义了一个和父类相同名字的方法

# 单继承的使用
class Master:
    name = '师父'
    def flapjack(self):
        print('摊鸡蛋煎饼')

class School:

    name = '学校'

    def school_flapjack(self):
        print('摊肉肠煎饼')


class Apprentice(Master,School):
    name = '徒弟'
    def flapjack(self):
        print('摊手抓饼')
        super().flapjack()



class LittleApprentice(Apprentice):
    name = '小弟'

    def flapjack(self):
        print('蒸包子')
        super().flapjack()
        

# 创建对象
la = LittleApprentice()
la.flapjack()
la.school_flapjack()
print(LittleApprentice.__mro__)

二,多态

# 多态
class Teacher:

    def __init__(self,name):
        self.name = name

    def run(self):
        print(f'{self.name}老师开车')

    def stop(self):
        print(f'{self.name}老师停车')

class Car:

    def __init__(self,type):
        self.type = type

    def start(self):
        print(f'{self.type}启动')

    def close(self):
        print(f'{self.type}熄火')

t = Teacher('张三')
c = Car('小汽车')

c.start()
t.run()
c.close()
t.stop()
# 多态
class Teacher:

    def __init__(self,name):
        self.name = name

    def run(self):
        print(f'{self.name}老师开车')

    def stop(self):
        print(f'{self.name}老师停车')

class Car(Teacher):

    def __init__(self,type,name):
        super().__init__(name)
        self.type = type

    def start(self):
        print(f'{self.type}启动')
        super().run()
    def close(self):
        print(f'{self.type}熄火')
        super().stop()


c = Car('小汽车','张三')

c.start()
c.close()

# 多态
class Teacher:

    def __init__(self,name):
        self.name = name

    def run(self):
        pass

    def stop(self):
        pass

class Car(Teacher):

    def __init__(self,type,name):
        super().__init__(name)
        self.type = type

    def run(self):
        # 在多态实现时,子类继承父类并对父类方法进行重写
        print(f'{self.type}启动')
        print(f'{self.name}老师开车')
    def stop(self):
        print(f'{self.type}熄火')
        print(f'{self.name}老师停车')

class Metro(Teacher):

    def __init__(self,type,name):
        super().__init__(name)
        self.type = type

    def run(self):
        # 在多态实现时,子类继承父类并对父类方法进行重写
        print(f'{self.type}启动')
        print(f'{self.name}老师乘坐地铁')
        
    def stop(self):
        print(f'{self.type}到站')
        print(f'{self.name}老师下车')


# 单独封装一个行为函数
# 该函数就是对外提供一个函数接口,其他开发人员使用,就调用函数
def action(obj):
    # obj接收一个对象
    obj.run()
    obj.stop()

c = Car('越野车','张三')
action(c)


m = Metro('地铁1号线','李四')
action(m)

三、文件读写

3-1 文件数据读取

# 文件数据读取
# 1-打开文件 创建文件描述符
# open的第一个参数指定读取的文件路径  可以使用绝对路径  也可以使用相对路径  windos的路径需要改斜杠
# 第二参数指定读写方式  r读 w写
# 第三个参数指定文件编码格式,方便读取中文数据  常用的两种utf-8  gbk
f = open('D:/Python大数据就业/4-Python基础/day06-面向对象-文件处理-异常-模块/4-资料/students.txt','r',encoding='utf-8')

# 读取数据文件
# 第一种 读取一行数据
# line_data1 = f.readline()
# print(line_data1)
# line_data2 = f.readline()
# print(line_data2)

# 第二种读取多行数据  将读取的多行数据放入列表中  该方式最常用
lines_data = f.readlines()
print(lines_data)

# 第三种  一次将所有数据读取出来当成一个完整的字符串数据  前面已经读取过数据 read就无法再读到数据 所以在实际开发中三种方式选择一种
# data = f.read()
# print(data)
# print(type(data))


# 数据取完成后可以使用close方法关闭文件
f.close()

3-2 数据写入文件

  • 写入方式

四、异常处理

# 索引下标取值错误
data = 'itcast'
data[100]

# 字典取值错误
data = {'name':'张三'}
data['age']

# 类型错误
data = '100'
data2 = 10
data3 = data/data2

# 文件读取错误 路径不存在
with open('aaa.txt','r',encoding='utf-8') as f:
    f.read()

指定异常类型捕获

# 可以捕获所有异常
try:
    data_str = 'itcast'
    # data_str[100]
    f = open('aasd.txt','r',encoding='utf-8')
except:
    # 捕获到异常处理的业务逻辑
    print('异常被捕获')
    # 异常被捕获后,可以正常执行后续的逻辑
print('其他代码逻辑')

# 捕获固定的异常 处理固定错误
try:
    # data = 15/0
    # f = open('aasd.txt', 'r', encoding='utf-8')
    data_str='itcast'
    data_str[100]
# 捕获指定异常
except (FileNotFoundError,ZeroDivisionError,IndexError):
    print('捕获0为除数的异常')
print('其他代码逻辑')

异常的其他处理

try:
    data = 15/0
    # Exception as e 获取异常的错误信息
    # 可以捕获到异常后输出错误信息
except Exception as e:
    print('异常被捕获')
    print(e)
else:
    print('else  没有异常逻辑')
finally:
    print('finally :无论是否有异常都执行')

函数中的异常处理

def func(a,b):

    data = a + b
    print(data)

try:
    # 调用其他开发人员编写的代码处理错误
    func('10',20)
except Exception as e:
    print(e)

  • 20
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值