Python的面向对象(一):面向过程与面向对象、类和对象、面向对象的基本语法

一.面向过程与面向对象

面向过程:1.根据业务逻辑从上到下写代码。
     2.开发思路是将数据和函数按照执行的逻辑顺序组织在一起
     3.分开考虑数据与函数
优点:复杂度的问题简单化、流程化
缺点:扩展性差,牵一发而动全身
特点:1.注重步骤与过程,不注重职责分工,关注点是怎么做
   2.如果需求复杂,代码会变得很复杂
   3.开发复杂项目,没有固定的套路,开发难度很大!
   
面向对象:1.将数据与函数绑定到一起
     2.进行封装
     3.更快速高效地开发程序
     4.减少重复代码的重写过程
优点:可扩展性高
缺点:编程复杂度高,容易出现过度设计问题
特点:1.注重对象和职责,不同的对象承担不同的职责,关注点是谁来做。
   2.更加适合应对复杂的需求变化,是专门应对复杂项目开发,提供的固定套路。
   3.需要在面向过程基础上,再学习一些面向对象的语法。

二.类和对象

1.类和对象的定义

:用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法,是抽象的,不能直接使用。
对象:通过类定义的数据结构实例,可以直接使用。由哪一个类创建出来的对象,就拥有在哪一个类中定义的属性和方法。对象包括两个数据成员(类变量和实例变量)和方法。

2.类和对象的关系

1.类是模板,对象是根据类这个模板创建出来的,应该先有类,再有对象。
2.使用同一个类,能够创建出很多对象。
3.类中定义了什么属性和方法,对象中就有什么属性和方法。
4.不同对象对应的属性值也会不同。

3.类的设计

设计一个类,通常需要满足三个要素:
1.类名:这类事物的名字,按照大驼峰命名法起名。
2.属性:这类事物具有什么样的特征。
3.方法:这类事物具有什么样的行为。

4.类和对象的简单语法格式

定义一个只包含方法的类,语法格式:

class 类名:
    def 方法1(self,参数列表):# 方法里的第一个参数必须是self
        pass
    def 方法2(self,参数列表):
        pass

创建对象,语法格式:

对象变量名 = 类名()

三.面向对象的基本语法

先用一个实例来解析:

class Student(object):  # 关注Student类有哪些特征和行为
    # 在 __init__ 方法里,以参数的形式定义特征,我们称之为属性
    def __init__(self, name, age):
        self.name = name
        self.age = age
    # 行为定义为一个个函数
    def play_game(self):
        print('正在打游戏')
    def eat(self):
        print('正在吃东西')
# 使用 Student 类创建了两个实例对象 s1,s2
# s1和s2都会有name,age属性,同时都有play_game和eat方法
s1 = Student('张三', 18)  # Student() ==> 会自动调用 __init__ 方法
s2 = Student('李四', 17)
# 根据业务逻辑,让不同的对象执行不同的行为
s1.play_game()
s2.eat()

运行结果:

正在打游戏
正在吃东西

1.self语句的使用

谁对象调用了方法,方法里的self指的就是谁。通过 self.属性名 可以访问到这个对象的属性;通过 self.方法名() 可以调用这个对象的方法。

class Student(object):
    def __init__(self, name):
        self.name = name
    def play_game(self):
        print('{}正在玩游戏'.format(self.name))
s1 = Student('张三')
print(s1.name)  #张三
s1.play_game()  #张三正在玩游戏

s1=Student(‘张三’) 这段代码具体做了什么呢?

  1. 调用 new 方法,用来申请内存空间
  2. 调用 init 方法传入参数,将 self 指向创建好的内存空间,填充数据
  3. 变量 s1 也指向创建好的内存空间

2.给对象添加属性和修改

Python支持动态属性,当一个对象创建好了以后,可以直接使用 对象.属性名 = 属性值 就可以很方便的给对象添加或者修改一个属性。
直接使用等号给一个属性赋值,如果这个属性以前不存在,会给对象添加一个新的属性

class Student(object):
    def __init__(self, name):
        self.name = name
    def play_game(self):
        print('{}正在玩游戏'.format(self.name))
s1.age=18  #给对象添加一个age属性
print(s1.age) # 18 

如果这个属性以前存在,会修改这个属性对应的值。

class Student(object):
    def __init__(self, name):
        self.name = name
    def play_game(self):
        print('{}正在玩游戏'.format(self.name))
s1 = Student('张三')
s1.name = '李四'
s1.play_game()  #李四正在玩游戏

在日常开发中,不推荐在类的外部直接给对象添加属性这种方式。对象应该具有哪些属性,我们应该封装在类的内部。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值