设为首页 加入收藏

TOP

python基础-面向对象(一)
2023-07-25 21:26:21 】 浏览:54
Tags:python 基础 向对象

1.面向对象

??面向对象编程是在面向过程编程的基础上发展来的,它比面向过程编程具有更强的灵活性和扩展性,所以可以先了解下什么是面向过程编程:

??面向过程编程的核心是过程,就是分析出实现需求所需要的步骤,通过函数一步一步实现这些步骤,接着依次调用即可,再简单理解就是程序

??从上到下一步步执行,从头到尾的解决问题;

??而面向对象编程是把构成事物的整个需求按照特点、功能划分,将这些存在共性的部分封装成对象,创建对象的目的不是为了完成某一个步骤,

??而是为了描述某个事物在整个解决问题的步骤中的行为。 ????

??eg: 小明用美的洗衣机洗脏衣服,流程是怎样的?

??面向过程的解决方法:

????1、执行加洗衣液方法;

????2、执行开启洗衣机方法;

????3、执行加水方法;

????4、执行洗衣服方法;

????5、执行甩干方法;

????6、取出衣服;

????以上就是将解决这个问题的过程拆成一个个方法,通过按顺序执行方法来解决问题。

??面向对象的解决方法:

????1、可以先归纳出两个对象:“美的洗衣机”对象和“小明”对象

????2、针对对象“美的洗衣机”加入一些它的方法:“自动注水方法”“洗衣方法”、“烘干方法”

????3、针对对象“小明”加入他的方法:“加洗衣液方法”、“开启洗衣机方法”、“取出衣服方法”

????4、然后执行,使用对象.动作 的方式,执行各步骤

????小明.加洗衣液

????小明.开启洗衣机

????美的洗衣机.自动注水

????美的洗衣机.洗衣服

????美的洗衣机.烘干

????小明.取出衣服

????解决同一个问题 ,面向对象编程就是先抽象出对象,然后用对象执行方法的方式解决问题。

 

2.类

??如果想通过面向对象编程,首先需要创建一个类(class),才能实例化(或叫具象化)对象;

??(洗衣例子中要先有人这个类,才能有“小明”对象、先有洗衣机类,才能有“美的洗衣机”这个对象)

??类可以理解成一个模板,通过它可以创建出无数个具体实例(对象);

??使用类的关键字class,来声明类,首字母大写,多个单词时每个单词首字母要大写(驼峰命名法);

??eg: class MyName(object): 

??????(object)可以不写,object是python中的一个通用对象,添加它后可以使用更多的内置功能;

class Test(object):
    name = 'test'   # 定义一个类属性

    def run(self):
        print(f'{self.name}在跑步!')


xiaoming = Test()  # 实例化一个对象xiaoming
print(xiaoming.name)  # 对象xiaoming可以调用类属性
xiaoming.run()  # 对象xiaoming可以调用类方法
'''
test
test在跑步!
'''

??类的参数self

??可以看到类的方法中默认第一个参数是self,且是必填的;(python中的self关键字只用于类的方法中);

??self也是一个对象,它代表实例化变量(例子中的xiaoming)本身(xiaoming可以调用name属性和run方法,都是self帮助找到的)

class Person(object):

    name = None  # 类属性(也叫类实例化属性)
    age = None

    def run(self):
        print('可以直接使用self调用类属性')
        print('打印属性:'+str(self.name))
        a = 'new'   # 类方法中定义的变量无self时,属于方法中的局部变量
        print('打印局部变量:'+a)

    def work(self):
        print('利用self可直接调用类中其它类函数')
        self.run()

    def jump():
        print('不添加self参数,就不属于类函数,就不可以被实例化的对象调用')


# 实例化一个对象xiaoming
xiaoming = Person()
# 可以直接调用类属性(类实例化属性)
print(xiaoming.name)  # None
# 也可为类属性(类实例化属性)重新赋值
xiaoming.name = 'xiaoming'
# 调用类方法, 调用时无需传递self参数值
xiaoming.work()
'''
利用self调用类中其它函数
可以直接使用self调用类属性
打印属性:xiaoming  (此时类属性值已被实例化对象修改)
打印局部变量:new
'''
# print(xiaoming.a)  # AttributeError: 'Person' object has no attribute 'a'  方法中的局部变量不可被实例化对象调用

# 实例化另一个对象xiaohong
xiaohong = Person()
print(xiaohong.name)  # None # 对象xiaohong并不会使用到对象xiaoming修改的类属性(类实例化属性)值;对象修改的类属性(类实例化属性),只能作用于对象本身
xiaohong.jump()  # 非类函数无法被对象调用,直接报错
'''
Traceback (most recent call last):
  File "D:\python_exercise\test_calss.py", line 44, in <module>
    xiaohong.jump()
TypeError: Person.jump() takes 0 positional arguments but 1 was given
'''
# 可以看到报错信息是函数无参数值,却被传递了一个,说明对象在调用方法时,自动传递了self参数,所以直接报错了

 

3.类的构造函数

??类中的一种默认函数,用来将类实例化的同时,将参数传入类中;(类似于函数执行时,可以传一些参数)

??def __init__(self, a, b):

????self.a = a      # 类实例化对象的属性

????self.b = b

??此时self.a和self.b就可以在类的各个类函数中使用了;

class Person(object):

    def __init__(self, name):
        self.name = name  # self.声明的变量是类实例属性

    def run(self):
        print(f"{self.name}在跑")


test = Person('x')
test.run()  # x在跑

'''
此时已经见过了类中可定义的多种变量
类下直接定义的变量,属于类属性、又属于类实例化对象属性 (可被实例化后的对象直接引用)
构造函数中self.开头定义的属性,属于类实例化对象属性,不属于类属性(可被实例化后的对象直接引用)(工作中多用,且多在构造函数中提前定义好)
类函数中a=''定义的变量,属于局部变量,既不属于类实例化对象属性,也不属于类属性(不可被实例化后的对象直接引用)
'''

 

4.对象的生命周期

??一个对象从出生到消亡的过程;

??实例化对象后,会调用内置函数__init__, 此时对象生命开始,该对

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python读取大量Excel文件并跨文件.. 下一篇教你用Python制作BMI计算器

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目