Python学习计划第二天——创建类


活动地址:CSDN21天学习挑战赛

Python安装完毕后释放了大量的文件,列表、元组等都是 builtins.py模块中定义的类。除此之外,开发者还可以使用class关键字创建类。类有两种类型,一种是可以实例化的类,另一种称为抽象类,在包含抽象方法的时候,不能实例化。

一.创建普通的类

与创建自定义函数类似,创建类也要使用关键词加类名、参数列表的形式。

class 类名([基类列表]):
    属性名称
    方法名称

​如上所示,使用class创建普通的类。

1.创建类

class Chicken:
    color="白色"
    num="num1"

创建该类型的实例,只需使用类名加括号的形式,如上。使用class关键字定义类,可以提供一个可选择的父类或者说基类,如果没有合适的基类,就默认使用object作为基类。class行之后是可选的文档字符串、静态成员定义、方法定义。

2.创建实例

chicken=Chicken()
print("对象地址:",id(chicken))
print("对象类型:",type(chicken))

输入对象内存地址和对象类型,结果如下所示

对象地址: 2966030800720
对象类型: <class '__main__.Chicken'>

二、创建抽象类

创建抽象类需要从ABCMeta类继承,该类定义在abc模块中,该模块包含创建抽象类的修饰符。普通的抽象化可以实例化,如下所示

from abc import ABCMeta

class Poultry(metaclass=ABCMeta):
    color="白色"
    num="num1"

poultry=Poultry()
print("对象地址:",id(poultry))
print("对象类型:",type(poultry))

执行结果如下

对象地址: 1927195546608
对象类型: <class '__main__.Poultry'>

若是该抽象类包含了抽象方法,则不能实例化,如下

from abc import ABCMeta,abstractmethod

class Poultry(metaclass=ABCMeta):
    color="白色"
    num="num1"

    @abstractmethod
    def eat(self):
        pass

    @abstractmethod
    def run(self):
        pass
poultry=Poultry()
print("对象地址:",id(poultry))
print("对象类型:",type(poultry))

执行结果如下,出现类型错误异常

Traceback (most recent call last):
  File "C:\practice.py", line 14, in <module>
    poultry=Poultry()
TypeError: Can't instantiate abstract class Poultry with abstract methods eat, run

构造方法与析构方法

与大多数面向对象语言类似,Python的类也可以定义构造方法。销毁该类型的某个对象时,也可以自动调用析构方法。析构方法用于控制创建对象的方式,一般给对象设置初始值;析构方法用于控制销毁对象的方式,一般需要手动释放的系统资源。

如下,创建文件操作类。在第3行,使用_init_定义构造方法,并指定参数path。在_init_方法中,self是所有实例方法的第一个参数,也是默认参数,表示当前对象。因此第5行的含义就是给当前对象的_path属性设置初始值为path。_init_方法会在创建对象时自动调用。在第6行,调用open方法,打开path所指向的文件,并将返回的文件对象赋值给_f属性。在第8行,使用_del_定义析构方法,在该方法中判断文件对象是否关闭,若未关闭,则调用close方法。当使用del关键字删除该对象时,_del_方法也会自动调用。

class FileOperate:

    def_init_(self,path):
        print("自动调用_init_方法!")
        self._path=path
        self._f=open(path)

    def_del_(self):
        print("自动调用_del_方法!")
        if not self._f.closed:
            self._f.colse()

file_operate_obj=FileOperate(r"C:\pythonProject\1.txt")
del file_operate_obj

执行结果如下,输出构造方法与析构方法的执行过程

自动调用_init_方法!
自动调用_del_方法!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

8X_I

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值