为了账号安全,请及时绑定邮箱和手机立即绑定

Python入门学习系列——Python类

标签:
Python
Python 类
创建和使用类

Python中使用class关键字创建类,根据约定,类名首字母要大写。

示例,创建一个Dog类:

class Dog(object):
    """类的定义和使用"""
    def __init__(self,name,age):
        #初始化属性name和age
        self.name=name
        self.age=age

    def sit(self):
        print(self.name.title()+"执行sit命令")

    def roll_over(self):
        print(self.name.title()+"执行roll_over命令")

下面对上述示例中的代码以及注意事项做详细说明。

class关键字

#Python 3
class Dog():
#Python 2.7
class Dog(object):

声明类时,使用class关键字,类名按照约定首字母要大写,在Python2.7中创建类时,需要在括号中包含object;在Python3中创建类时,括号中可以不指定object

__init__()方法

def __init__(self,name,age):
    #初始化属性name和age
    self.name=name
    self.age=age

__init__()是一个特殊的方法,类似于C#或java中的构造方法,当创建类的实例时,会自动被调用。该方法的名称中,开头和结尾包含两个下划线,这是Python中的一种约定,旨在避免Python默认方法与普通方法发生名称冲突。

__init__()方法的参数中,形参self必不可少,还必须位于其他形参的前面。形参self不需要显示的传入实参值,Python在创建实例时,调用__init__()将自动传入实参self。并且不仅仅是__init__()方法,每个与类相关联的方法调用都自动传递实参self,它是一个指向实体本身的引用,让实例能够访问类中的属性和方法。

另外,还需要注意一点,和其他语言相比(比如C#或java),Python不需要显式的在方法体外声明类的属性,而是直接在__init__()方法中,使用self定义了属性和赋值操作(有点像Javascript中的对象的属性赋值操作),以self为前缀的变量可供类中的所有方法使用,也可以通过类的任何实例来访问这些变量属性。

实例化类和访问类成员

Python中实例化一个类,可以直接按照方法调用的形式实例化类,而不需要使用new关键字。

my_dog=Dog("旺财","3")
#访问类的属性
print(my_dog.age)
print(my_dog.name)
#调用类的成员方法
my_dog.sit()
my_dog.roll_over()

Python中使用句点表示法来访问类成员,即:实例名称.类成员

给属性指定默认值

Python中的属性,不像其他语言在方法的外部声明和赋值,而是在__init__()方法中指定,因此给属性指定默认值,也需要在__init__()方法中进行。

class Car(object):
    """description of class"""
    def __init__(self,make,model,year):
        #初始化描述汽车的属性
        self.make=make
        self.model=model
        self.year=year
        #为odometer_reading指定默认值为0
        self.odometer_reading=0

由于Python并不是一个像C#或Java那种对面向对象有着严格要求的语言,Python相对来说更加的松散和灵活,它没有那么多的限制,(例如C#中的私有成员(private)),在Python中,可以对实例的所有属性进行读写操作,大量的直接对实例属性读写操作很容易导致混乱,因此在实际开发中,强烈建议,使用类中的方法去操作属性,而尽量避免直接使用实例名给属性赋值。

继承

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

子类的方法__init__()

创建子类的实例时,Python首先需要完成的任务是给父类的所有属性赋值。因此,需要在子类的__init__()方法中调用父类的__init__()方法,为此需要使用super()特殊函数。另外,还需要在子类定义时,指明要继承的父类。

class ElectricCar(Car):
    def __init__(self, make, model, year):
        super().__init__(make, model, year)

在Python中使用继承需要注意以下几点:

  • 由于Python是一种解释型语言,类似于Javascript,因此在创建子类时,父类必须包含在当前文件中,且位于子类前面。在定义子类时,必须在括号内指定父类的名称。
  • 为了实现父类和子类的关联,需要在子类的__init__()方法中使用super().__init__()语句,使子类包含父类的所有属性。

重写父类的方法

可以在子类中定义一个和父类方法同名的方法实现重写。Python将会忽略父类中的方法,只关注子类定义的同名方法。

补充

Python也可以像其它于语言一样,将一个类的对象作为另一个类的成员属性进行使用。

导入类

Python允许将类存储在模块中,然后在主程序中导入所需的模块。

导入单个类

首先将单个类存储在单个模块(.py文件)中,类名和模块文件名不必保持一致,一般类名的首字母大写,但是模块名使用下划线连接各个词组并且全是小写。然后使用导入模块的语句导入单个类。

例如,Car类在car.py模块文件中,可以使用下述语句导入Car类:

from car import Car
#使用Car类
my_new_car=Car('audi','a4','2016')

在一个模块中存储多个类并导入

一个.py文件对应一个模块,可以根据需要在一个模块中定义多个类,注意:为了便于阅读,应该尽量包含该类的说明注释。接着,就可以使用下述语句导入该模块中需要使用到的一个类或多个类。导入多个类时,用逗号分隔各个类,之后就可以直接使用这些导入的类。

from car import Car,ElectricCar

导入整个模块

可以直接导入整个模块,然后使用句点表示法访问需要访问的类,模块名.类名

import car
my_beetle=car.Car('test','wy','12')

导入模块中所有的类(不推荐)

from module_name import *

需要从一个模块中导入很多类时,最好导入整个模块,并使用module_name.class_name的形式访问类。

在一个模块中导入另一个模块

可以在需要使用的模块中使用多条导入语句进行导入。例如:

from car import Car
from electric_car import ElectricCar
类编码格式说明
  • 类名采用驼峰命名法,即类名中的每个单词的首字母都大写,而不使用下划线。实例名和模块名都采用小写格式,并且在单词之间使用下划线连接。
  • 类在定义时,应在类定义后面包含一个文档字符串(使用"""包裹的字符串),用来描述类的功能。
  • 在类中,可以使用一个空行来分割方法;在模块中,可以使用两个空行来分隔类。
  • 需要同时导入标准库中的模块和自己编写的模块时,应该先编写导入标准库模块的import语句,再添加一个空行,然后编写导入自己模块的import语句。

参考资源

  • 《Python编程:从入门到实践》

本文后续会随着知识的积累不断补充和更新,内容如有错误,欢迎指正。

最后一次更新时间:2018-08-13


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消