栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python-类与模块

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python-类与模块

文章目录
  • 类的概念
  • 如何创建一个类
  • 方法和特殊方法
  • 静态数据、静态方法和装饰器
  • 继承和多态
    • 继承
    • 多态
  • 模块调用和多文件应用程序
  • Python标准库

类的概念

python完全支持过程化编程和面向对象编程。面对对象编程是一种设计思想,意味着我们把对象作为程序的基本单元,而每个对象包含了自己的属性和方法。面向对象编程主要有以下特点:

  • 封装(Encapsulation):对外部世界隐藏对象的工作细节。
  • 继承(Inheritance):继承使子类具有父类的各种属性和方法,而不需要编写相同的代码。
  • 多态(Polymorphism):为不同的数据类型的实体提供统一的接口。

类的创建的语法:

class className(base_classes):
    suite

对象的创建有两个步骤:

  • 构造对象
  • 初始化对象
如何创建一个类
class Chair(object):
    def __init__(self, name, legs=4):
        self.name = name
        self.legs = legs

__init__ 是 Python 中的特殊方法(special method),它用于初始化对象。它是一个实例被创建时最先被调用的函数,并且每次创建实例,它的__init__都会被调用,而且它的第一个参数永远是 self,指向创建的实例本身。(init是initial的简写,顾名思义就是用来初始化的)

chair1 = Chair('Barcelona')
chair2 = Chair('Bar',1)

print(chair2.name)
chair1.legs = 2
print(chair1.legs)
输出:
Bar
2

由于这些属性是public,可以通过’ . '运算符进行读取和赋值。

方法和特殊方法
class Rectangle(object):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height
    
rect = Rectangle(5, 4)
print(rect.width, rect.height, rect.area())
输出:
5 4 20

python 方法的机理,包括特殊方法,与函数的机理是完全一样的,不过会外加第一参数self,以及对self的属性进行访问的能力和调用self的方法。

静态数据、静态方法和装饰器

在某些情况下,拥有一些能够和类而不是类的实例一起使用的数据会非常有用。

class Balloon(object):
    unique_colors = set() 
    def __init__(self,color):
        self.color = color
        Balloon.unique_colors.add(color)
    
    @staticmethod
    def uniqueColorCount():
        return len(Balloon.unique_colors)

    @staticmethod
    def uniqueColors():
        return Balloon.unique_colors.copy()   

静态数据是在class块内创建的,但却是在任何def语句之外。为了访问静态数据,必须给定其名字,最简单的方法就是使用类名,就像在Balloon类的静态方法中所做的那样。
@staticmethod是一个装饰器。所谓的装饰器就是一个函数,它带一个作为参数的函数,用一定的方式封装函数,然后再将封装后的函数赋值回初始函数的名字。因此它和下列代码有着相同的效果;

def uniqueColors():
        return Balloon.unique_colors.copy()
    uniqueColors = staticmethod(uniqueColors)

符号@用于表明这是一个装饰器。staticmethod( )函数是一个python的内置函数。

继承和多态 继承

在面向对象编程中,当我们已经创建了一个类,而又想再创建一个与之相似的类,比如添加几个方法,或者修改原来的方法,这时我们不必从头开始,可以从原来的类派生出一个新的类,我们把原来的类称为父类或基类,而派生出的类称为子类,子类继承了父类的所有数据和方法。
先从一个简单的类开始;

class Person:
    def __init__(self, name, job=None, pay=0):
        self.name = name
        self.job = job
        self.pay = pay

    def lastName(self):
        return self.name.split()[-1]
    
    def giveRaise(self,percent):
        self.pay = int(self.pay * (1+percent))
    
    def __repr__(self):
        return '[Person: %s, %s]' %(self.name, self.pay)

class Manger(Person):
    def giveRaise(self, percent, bonus=.10):
        Person.giveRaise(self, percent + bonus)

    def side_remark(self):
        print(self.job, '千里之行,始于足下。')

if __name__ == '__main__':
    bob = Person('Bob Smitch')
    sue = Person('Sue Jones', job='dev', pay=100000)
    print(bob)
    print(sue)
    print(bob.lastName(),sue.lastName())
    sue.giveRaise(.10)
    print(sue)
    print('--------分隔-------')
    tom = Manger('Tom Jones','mgr',50000)
    tom.giveRaise(.10)
    tom.side_remark()
    print(tom.lastName())
    print(tom)
输出:
[Person: Bob Smitch, 0]
[Person: Sue Jones, 100000]
Smitch Jones
[Person: Sue Jones, 110000]
--------分隔-------
mgr 千里之行,始于足下。
Jones
[Person: Tom Jones, 60000]
多态
if __name__ == '__main__':
    ...
    print('----three all----')
    for obj in (bob, sue, tom):
        obj.giveRaise(.10)
        print(obj)
输出:
----three all----
[Person: Bob Smitch, 0]
[Person: Sue Jones, 121000]
[Person: Tom Jones, 72000]

这里obj可能是一个Person或Manger,这就是python的多态概念,giveRaise的具体行为取决于你将它用到哪一个对象。

多态的概念其实不难理解,它是指对不同类型的参数进行相同的操作,根据对象(或类)类型的不同而表现出不同的行为。继承可以拿到父类的所有数据和方法,子类可以重写父类的方法,也可以新增自己特有的方法。有了继承,才有了多态,这样才能实现为不同的数据类型的实体提供统一的接口。

模块调用和多文件应用程序

面向对象编程允许把功能(例如,封装方法和数据属性)进行封装,如封装到类中。python模块允许在更高层次上封装哪些导入的功能—例如,整个类集,或者全部实例变量。所谓的模块可以认为是一个‘ .py ’后缀的文件。模块可能会含有导入时要执行的代码,但更为常见的是,它们通常只是在导入时,提供一些函数和实例化的类。

from person import Person

bob = Person('Bob Smitch')
sue = Person('Sue Jones', job='dev', pay=100000)
print(bob)
print(sue)
print(bob.lastName(),sue.lastName())
sue.giveRaise(.10)
print(sue)

person.py文件保存定义好的两个类;

from person import Manger

tom = Manger('Tom Jones','mgr',50000)
tom.giveRaise(.10)
tom.side_remark()
print(tom.lastName())
print(tom)

Python标准库

Python有自己的标准库,我们下载Python的时候,它们已经被默认安装了,其中有很多现成的模块供我们调用(关于标准库大家可以自行查阅)。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/487670.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号