python中的类,文件与异常

面向对象在C++的学习过程中已经有过接触,不过自己学的并不是怎么好,还不能对面向对象有一个很好的认识,所以在学习python中的类时也是感觉特别费劲。不过这也只是经过几天学习后的一个感受,对于没掌握好的这部分以后会抓紧练习的,要把C++和python中的这部分知识掌握好。下面就简单介绍一下python中的类吧!

创建类

下面是创建的一个简单的类。

class Dog():
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def sit(self):
        print(self.name.title() + " is now sitting.")
    def roll_over(self):
        print(self.name.title() + " rolled over!")
my_dog = Dog('willie', 6)
print("My dog's name is " + my_dog.name.title() + ".")
print("My dog is " + str(my_dog.age) + " years old.")
my_dog.sit()

结果:
My dog’s name is Willie.
My dog is 6 years old.
Willie is now sitting.
类中的函数称为方法.在Python中,首字母大写的 名称指的是类 。
在这里__init__()是一个特殊的方法,每当你根 据Dog 类创建新实例时,Python都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线。
self代表类的实例,而非类。每个与类相关联的方法调用都自动传递实参self ,它是一个指向实例本身 的引用,让实例能够访问类中的属性和方法。类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。

继承

一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的
类称为父类 父类 ,而新类称为子类 子类 。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。

class People():
    # 定义基本属性
    name = ''
    age = 0
    # 定义私有属性,私有属性在类外部无法直接进行访问
    __weight = 0
    # 定义构造方法
    def __init__(self, n, a, w):
        self.name = n
        self.age = a
        self.__weight = w
    def speak(self):
        print("%s 说: 我 %d 岁。" % (self.name, self.age))
# 单继承示例
class student(People):
    grade = ''
    def __init__(self, n, a, w, g):
        # 调用父类的构函
        People.__init__(self, n, a, w)
        self.grade = g
# 覆写父类的方法
    def speak(self):
        print("%s 说: 我 %d 岁了,我在读 %d 年级" % (self.name, self.age, self.grade))
s = student('ken', 10, 60, 3)
s.speak()

结果:
ken 说: 我 10 岁了,我在读 3 年级

这一部分People.__init__(self, n, a, w) self.grade = g也可以改写为super().__init__(n,a,w) self.grade=g这两种写法都一样,主要是想说一下super的用法。super() 是一个特殊函数,帮助Python将父类和子类关联起来。

 def speak(self):
        print("%s 说: 我 %d 岁了,我在读 %d 年级" % (self.name, self.age, self.grade))

这一部分内容其实就是我们所熟悉的父类的重写。如果我们对于父类方法的功能不能满足自己的需求就可在子类中重写父类的方法。

多继承

多继承如下

class A:        # 定义类 A
.....

class B:         # 定义类 B
.....

class C(A, B):   # 继承类 A 和 B
.....
导入类

导入类其实也是用到了模块。和之前导入函数模块差不多,这里就简单讲一下。
我们还是要先创建一个包含类的模块,其实也就是一个包含类的.py文件。
(1)导入单个类。例如 from car import Car car是要使用的类的文件名,Car是你要使用的类。这里的car和Car都是自己定义的,具体使用的要看你自己创建的文件和类名。
(2)导入多个类名。例如:from car import Car1,Car2,Car3.
(3)导入所有的类。例如:from car import *这样就导入了car这个文件中所有的类。但是并不推荐使用这种方法。如果想要从一个模块中导入很多类时,最好导入整个模块这种方法(也就是下面这种方法)。
(4)导入整个模块。import car当我们访问的时候可以使用语法 module_name.class_name 访问需要的类。例如:my_beetle = car.Car()

类的属性与方法

类的私有属性
__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。(在第二个案例中出现过)
类的方法
在类的内部,使用 def 关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数。
类的私有方法
__private_method:两个下划线开头,声明该方法为私有方法,不能在类的外部调用。在类的内部调用 self.__private_methods.

文件

下面先给出两个案例,然后再根据案例学习。

f=open('D:\\lt.txt')
print(f.read())
f.close()
f='D:\\lt.txt'
with open(f) as file_object:
    contents = file_object.read()
    print(contents.rstrip())

结果:终于打开了~哈哈哈~_
open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 Error。当不使用with只使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。这样一说可能也就知道with的用处了。关键字with 在不再需要访问文件后将其关闭。这样对于容易忘记加close()方法的同学是很方便的。用方法read() 读取这个文件的全部内容,并将其作为一个长长的字符串存储在变量contents 中。但read() 到达文件末尾时返回一个空字符串,而将这个空字符串显示出来时就是一 个空行。要删除多出来的空行,可在print 语句中使用rstrip() :
下面是文件常用的一些函数。
readline() 方法用于从文件读取整行,包括 “\n” 字符。如果指定了一个非负数的参数,则返回指定大小的字节数,包括 “\n” 字符。
readlines() 方法用于读取所有行(直到结束符 EOF)并返回列表,该列表可以由 Python 的 for… in … 结构进行处理。如果碰到结束符 EOF 则返回空字符串。
seek() 方法用于移动文件读取指针到指定位置。

文件异常

Python使用被称为异常 异常 的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继 续运行;如果你未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。 异常是使用try-except 代码块处理的。try-except 代码块让Python执行指定的操作,同时告诉Python发生异常时怎么办。使用了try-except 代码块时,即便出现异常, 程序也将继续运行:显示你编写的友好的错误消息,而不是令用户迷惑的traceback。

使用 try-except 代码块
print(5/0)

结果:ZeroDivisionError: division by zero

try:
    print(5/0)
except ZeroDivisionError as reason:
    print("这样写是错误的!"+" 错误的原因是:"+str(reason))

结果:这样写是错误的! 错误的原因是:division by zero
我们将导致错误的代码行print(5/0) 放在了一个try 代码块中。如果try 代码块中的代码运行起来没有问题,Python将跳过except 代码块;如果try 代码块中的代码导致了 错误,Python将查找这样的except 代码块,并运行其中的代码,即其中指定的错误与引发的错误相同。

使用try-finally语句
执行的代码try:
    检测范围
except Exception (as reason):
    出现异常(Exception)后处理的代码
finally:
    无论如何都会被执行的代码
使用raise引发异常
raise ZeroDivisionError('除数为零')

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值