Python教程--类和方法

一、前言

这章我们来介绍类和方法,方法就是函数,可以将某些功能集中封装起来,起到模块划分和复用的作用,不用再像之前那样,每次用的时候写上一大堆的代码,这样很不利于开发;而类,是用来描述具有相同的属性和方法的对象的集合,俗话说的好,一切皆对象,用面向对象的思维编程,可以让我们代码更加扩充性更好,维护也更加的方便

二、方法(函数)

我们之前使用最多的就是print,他就是一个打印函数,只要传进去相对应的值,那他就会给我们打印出来,这是他的功能,那我们也可以将我们自己常用的,或者分类较明确的封装成函数,这样方便别的模块进行调用,函数的基本框架如下:

def functionname( parameters ):
   "函数_文档字符串"
   function_suite
   return [expression]

functionname就是你函数的名字,可以任意起(注意:不能跟已有的函数名重名)
parameters是参数,比如print函数需要的参数,就是你需要打印什么内容,这个参数你可以定义为字符串,整型,列表等等,也可以定义多个参数,中间用逗号分隔开来即可
function_suite就是你的函数要实现的内容啦,你可以做一个简单的加法,也可以实现一个复杂的算法之类的
expression最后的return,是调用这个函数之后,要返回什么值,当然,如果没有需要返回的,这一行可以不用写

那么用几个简单的例子让大家知道函数的最基本的用法吧:

def plus(x: int, y: int): # 指定两个整型参数x, y,后面的int表示必须传入整型的值,其他类型的值传进来会报错
    z = x + y #  执行x + y的操作,并将结果赋值给z
    return z  #  返回z的值


print(plus(1, 2))

结果:	3

上面的plus函数就是一个简单计算两个值相加,当然,我们也可以传入变量

a = 1
b = 2
def plus(x: int, y: int): 
    z = x + y
    return z  


print(plus(a, b)) #  传入a、b两个变量的值进去

结果:	3

我们也可以预定参数的默认值,当没有参数传入时,就可以使用默认值进行计算

a = 1
def plus(x: int, y = 2): #  只传入了a,并没有传入第二个参数,所以第二个参数y就使用默认值2
    z = x + y
    return z


print(plus(a))

结果:	3

函数也可以不用参数和返回值,像下面这样

z = 0
def test():
    global z # global全局声明这个z不是局部的z,而是外面全局的那个z,如果函数内部也有一个z,并且想给这个z赋值的话,就可以不用global声明
    z = 10

test()
print(z)

结果:	10

我们也可以在一个函数里面调用另外一个函数

def pulse(x, y):
    return x + y #  3、计算3 + 12并返回结果


def test():
    print(pulse(3, 12)) #  2、在test函数中调用pulse函数,传参为312,收到pulse函数返回的结果并显示


test() #  1、首先调用test函数

结果:	15

三、类

1、类的基本使用

是用来描述具有相同的属性和方法的对象的集合,比如公司里的员工,每个员工都有职位,薪资,部门这些共有的属性,我们可以用如下方式定义

class Employee(object):
    def __init__(self, name, department, salary): #  一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法
        self.name = name #  类的函数比普通函数多了一个self,代表当前对象的地址
        self.department = department
        self.salary = salary

    def display_info(self):
        print('this employee name is %s, department is %s, salary is %d' % (self.name, self.department, self.salary))

#  创建Employee类的第一个对象
a = Employee('Donnie', 'Develop', 5000)
#  创建Employee类的第二个对象
b = Employee('John', 'Administrator', 3000)

#  两个实例化对象分别调用display_info方法进行打印
a.display_info()
b.display_info()

结果:	this employee name is Donnie, department is Develop, salary is 5000
		this employee name is John, department is Administrator, salary is 3000

我们定义一个员工的类Employee,类中初始化三个属性,员工的姓名,部门和薪水,类中还有一个方法,这个方法的作用就是打印出当前员工的名字,部门和薪水;然后我们实例化a,b两个对象,这两个对象实例化不同的员工,然后分别打印出来。

也可以添加,删除,修改类的属性

class Employee(object):
    def __init__(self, name, department, salary):
        self.name = name
        self.department = department
        self.salary = salary

    def display_info(self):
        print('this employee name is %s, department is %s, salary is %d' % (self.name, self.department, self.salary))


a = Employee('Donnie', 'Develop', 5000)
b = Employee('John', 'Administrator', 3000)


a.age = 22
print(a.age)
a.age = 23
print(a.age)
del a.age
print(a.age)

结果:	22
		23
		Traceback (most recent call last):
  			File "F:/Test/hello.py", line 19, in <module>
    			print(a.age)
		AttributeError: 'Employee' object has no attribute 'age'

可以看到,我们在a实例中增加了一个本来没有的属性age,并赋值22,然后修改他为23,最后再删除掉他,当删除掉age之后,我们最后再打印a.age,程序就会报错

2、类的继承

类的继承,可以实现代码的复用,通过继承创建的类称为子类,被继承的类称为父类,我们来看一个例子

class Dog(object):
    def __init__(self):
        print('Dog init')

    def dog_info(self):
        print('This is Dog')


class Kirky(Dog): #  这里写明Kirky类继承Dog类
    def __init__(self):
        print('Kirky init')

    def kirky_info(self):
        print('This is Kirky')


d = Kirky()
d.dog_info()
d.kirky_info()

结果:	Kirky init
		This is Dog
		This is Kirky

可以看到,子类可以完全继承父类的方法并进行调用,而且,一个子类可以继承多个父类,我们把上面的程序改写一下,变成下面这样:

class Dog(object):
    def __init__(self):
        print('Dog init')

    def dog_info(self):
        print('This is Dog')


class B(object):
    def __init__(self):
        print('B init')

    def b_info(self):
        print('This is B')


class Kirky(Dog, B): #  Kirky同时继承Dog和B两个类
    def __init__(self):
        print('Kirky init')

    def kirky_info(self):
        print('This is Kirky')


d = Kirky()
d.dog_info()
d.kirky_info()
d.b_info()

结果:	Kirky init
		This is Dog
		This is Kirky
		This is B

3、方法的重写

有时候父类的方法并不能完全满足子类的需求,那我们可以进行方法的重写,子类可以起一个与父类方法相同名称的方法,然后重新构造里面的功能即可

class Dog(object):
    def __init__(self):
        print('Dog init')

    def dog_info(self):
        print('This is Dog')


class Kirky(Dog):
    def __init__(self):
        print('Kirky init')

    def dog_info(self): #  子类重写父类的dog_info方法
        print('This is new function')

a = Dog()
a.dog_info()
d = Kirky()
d.dog_info()

结果:	Dog init
		This is Dog
		Kirky init
		This is new function

四、总结

我们今天简单概述了方法和类,有了这两天学习的内容,大家已经可以独立写出一些程序了,什么?这两天东西多不好消化?没关系,那明天我们休息一天,把之前学习的,通过一个完整的代码示例呈现给大家,让大家从代码中去消化这两天学习的内容,领略Python的魅力

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值