python面向对象编程(类的定义,类的实例化,类的封装)

1、面向过程

优点:将复杂问题流程化,进而简单化
缺点:扩展性差,更改需求,可能整改代码都需要重写

2、面向对象

对现实世界的模拟
优点
可以编写真实世界的事物和情景的类,并基于这些类来创建对象
可以是程序的维护和扩展变得更简单,并且可以大大提高程序开发效率
特点

  • 封装:将对象的特征 与行为保存起来
  • 继承:通过集成,子类可快速获取父类特征与行为
  • 多态:不同的子类对象,调用相同的分类方法,产生不同的执行结果

3、类与对象

类:是描述具有相同的特征和行为的对象的集合,可以理解为模板,通过变量刻画类的特征,通过方法描述类的行为
对象:类实例化后,可生成一个或多个对象

3.1.类变量(类属性)和实例变量

  • 类属性
    python面向对象编程(类的定义,类的实例化,类的封装)_第1张图片
    python面向对象编程(类的定义,类的实例化,类的封装)_第2张图片

类变量 刻画类本省的特征(只与类有关)
实例变量 刻画对象的具体特征 与对象有关,这里的对象指的是实例化之后的对象

#  类的定义
class SpiderWeb():
    class_function = "爬取网站信息"   # 类变量   刻画类本身的特征,只与类有关系

    def __init__(self, name, url, page):   # 初始化方法,self表示当前对象
        self.basic_url = url   # 实例化变量  刻画对象的具体特征,这里的对象是指实例化后的对象
        self.page = page
        self.name = name

    def spell_url(self,):   # 普通方法
        for i in range(self.page):
            print("拼接{0}网站的第{1}页网址:{2}".format(self.name, i, self.basic_url+"/{0}".format(i),i))

    def send_request(self,header):   # 普通方法中可以增加方法变量
        print("{0}网站的请求头是{1}".format(self.name, header))
        for i in range(self.page):
            print("发送{0}网站的第{1}页的请求".format(self.name, i))

类的实例化,及相关方法的使用
zhiLian = SpiderWeb("智联", "http://www.zhaopin.com", 2)    # 实例化对象,实例化过程中,“zhilian”作为当前对象隐式传递给类的self
print(zhiLian.page)   # 访问实例化的属性
zhiLian.page =3       # 修改对象初始化后的属性
print(zhiLian.page)   # 再次访问实例化的属性
zhiLian.spell_url()
zhiLian.send_request("bigheads")

# 类变量和实例变量访问,首先查询构造函数中是否存在相应变量,如果没有则向上查找类变量中是否存在相应变量
print(zhiLian.class_function)     # 第一种访问类变量方法
print(zhiLian.__class__.class_function)  # 第二种访问类变量方法
print(SpiderWeb.class_function)print(self.class_function)      # 第三种访问类变量方法

# 查看对象属性
print(zhiLian.__dict__)   # 输出类的所有属性值

3.2 self说明

1、self名称是约定成俗的,即可以改成其他名称
2、self指向的是类实例化后的对象本身
3、self只有在类的方法中才会有,函数是不必带有self的 (单独时叫函数,在类中成为方法)
4、self在定义类的方法(实例化方法)时是必须的,实例化方法是类实例化后的对象,能够使用的方法
5、self在调用时不必传入相应的参数

  • 理解给对象添加属性
class Hero(object):
    def set_info(self):
        # 下面定义的了3个实例属性,且给它们设置了初始值
        self.name = "王老师"
        self.age = 18
        self.address = "山东青岛"

    def print_info(self):
        print(self.qq, self.email)


# 创建实例对象
hero = Hero()
# 调用方法,从而让第4、5、6行被执行,从而完成实例对象的属性添加
hero.set_info()
# 通过对象方式直接获取属性
print(hero.name, hero.age, hero.address)
# 给对象添加额外的属性
hero.qq = 123456
hero.email = "[email protected]"  # 这是王老师真实的邮箱哦....
# 调用方法,在方法中获取qq、email
hero.print_info()
  • 说明

  • 实例方法获取属性
    • 实例对象.实例方法()就相当于实例方法(实例对象)
    • 定义实例方法的时候,之所以第一个形参一定是self就是因为,当我们调用实例方法的时候Python解释器会自动将这个对象的引用当做第一个实参

python面向对象编程(类的定义,类的实例化,类的封装)_第3张图片

  • self作用
    python面向对象编程(类的定义,类的实例化,类的封装)_第4张图片
  • 多个对象
    python面向对象编程(类的定义,类的实例化,类的封装)_第5张图片

3.3构造函数 init

创建对象后,Python会自动调用一个特殊的方法名字叫__init__,一般情况下我们会在这个方法中完成对象属性的设置

class 类名(object):
    def __init__(self):
        pass
    

构造函数作用:
1、使用构造函数,可让模板产生不同特征的对象
2、初始化对象的特征(__init__方法会在对象创建完毕后&#x

你可能感兴趣的:(python,python,类,多态,封装)