登陆

极彩官网-Pyhton面向对象根底语法

admin 2019-09-07 276人围观 ,发现0个评论

方针

dir 内置函数

界说简略的类(只包括办法)

办法中的 self 参数

初始化办法

内置办法和特点

01. dir 内置函数(知道)

在 Python 中 目标简直是无极彩官网-Pyhton面向对象根底语法所不在的,咱们之前学习的 变量、数据、函数 都是目标

在 Python 中可以运用以下两个办法验证:

在 标识符 / 数据 后输入一个 .,然后按下 TAB 键,iPython 会提示该目标可以调用的 办法列表

运用内置函数 dir 传入 标识符 / 数据,可以检查目标内的 一切特点及办法

提示 办法名 格局的办法是 Python 供给的 内置办法 / 特点,稍后会给我们介绍一些常用的 内置办法 / 特点

提示 使用好 dir() 函数,在学习时许多内容就不需求死记硬背了

02. 界说简略的类(只包括办法)

面向目标 是 更大 的 封装,在 一个极彩官网-Pyhton面向对象根底语法类中 封装 多个办法,这样 经过这个类创立出来的目标,就可以直接调用这些办法了!

2.1 界说只包括办法的类

在 Python 中要界说一个只包括办法的类,语法格局如下:

class 类名:
def 办法1(self, 参数列表):
pass

def 办法2(self, 参数列表):
pass

办法 的界说格局和之前学习过的函数 简直相同

差异在于第一个参数有必要是 self,我们暂时先记住,稍后介绍 self

留意:类名 的 命名规矩 要契合 大驼峰命名法

2.2 创立目标

当一个类界说完结之后,要运用这个类来创立目标,语法格局如下:

目标变量 = 类名()

2.3 第一个面向目标程序

需求

小猫 爱 吃 鱼,小猫 要 喝 水

剖析

界说一个猫类 Cat

界说两个办法 eat 和 drink

依照需求 —— 不需求界说特点

class Cat:
"""这是一个猫类"""
def eat(self):
print("小猫爱吃鱼")
def drink(self):
print("小猫在喝水")
tom = Cat()
tom.drink()
tom.eat()

引证概念的着重

在面向目标开发中,引证的概念是相同适用的!

在 Python 中运用类 创立目标之后,tom 变量中 依然记载的是 目标在内存中的地址

也便是 tom 变量 引证 了 新建的猫目标

运用 print 输出 目标变量,默许情况下,是可以输出这个变量 引证的目标 是 由哪一个类创立的目标,以及 在内存中的地址(十六进制表明)

提示:在计算机中,一般运用 十六进制 表明 内存地址

十进制 和 十六进制 都是用来表达数字的,仅仅表明的办法不相同

十进制 和 十六进制 的数字之间可以来回转化

%d 可以以 10 进制 输出数字

%x 可以以 16 进制 输出数字

事例进阶 —— 运用 Cat 类再创立一个目标

lazy_cat = Cat()
lazy_cat.eat()
lazy_c麝手at.drink()

03. 办法中的 self 参数

3.1 事例改造 —— 给目标添加特点

在 Python 中,要 给目标设置特点,十分的简略,可是不引荐运用

由于:目标特点的封装应该封装在类的内部

只需求在 类的外部的代码 中直接经过 . 设置一个特点即可

留意:这种办法尽管简略,可是不引荐运用!

tom.name = "Tom"
...
lazy_cat.name = "大懒猫"

3.2 运用 self 在办法内部输出每一只猫的姓名

由 哪一个目标 调用的办法,办法内的 self 便是 哪一个目标的引证

在类封装的办法内部,self 就表明 当时调用办法的目标自己

调用办法时,程序员不需求传极彩官网-Pyhton面向对象根底语法递 self 参数

在办法内部

可以经过 self. 拜访目标的特点

也可以经过 self. 调用其他的目标办法

改造代码如下:

class Cat:
def eat(self):
print("%s 爱吃鱼" % self.name)
tom = Cat()
tom.name = "Tom"
tom.eat()
lazy_cat = Cat()
lazy_cat.name = "大懒猫"
lazy_极彩官网-Pyhton面向对象根底语法cat.eat()

在 类的外部,经过 变量名. 拜访目标的 特点和办法

在 类封装的办法中,经过 self. 拜访目标的 特点和办法

04. 初始化办法

4.1 之前代码存在的问题 —— 在类的外部给目标添加特点

将事例代码进行调整,先调用办法 再设置特点,调查一下履行作用

tom = Cat()
tom.drink()
tom.eat()
tom.name = "Tom"
print(tom)

程序履行报错如下:

AttributeError: 'Cat' object has no attribute 'name'
特点过错:'Cat' 目标没有 'name' 特点

提示

在日常开发中,不引荐在 类的外部 给目标添加特点

假如在运行时,没有找到特点,程序会报错

目标应该包括有哪些特点,应该 封装在类的内部

4.2 初始化办法

当运用 类名() 创立目标时,会 主动 履行以下操作:

为目标在内存中 分配空间 —— 创立目标

为目标的特点 设置初始值 —— 初始化办法(init)

这个 初始化办法 便是 init 办法,init 是目标的内置办法

init 办法是 专门 用来界说一个类 具有哪些特点的办法!

在 Cat 中添加 init 办法,验证该办法在创立目标时会被主动调用

class Cat:
"""这是一个猫类"""
def __init__(self):
print("初始化办法")

4.3 在初始化办法内部界说特点

init 办法内部运用 self.特点名 = 特点的初始值 就可以 界说特点

界说特点之后,再运用 Cat 类创立的目标,都会具有该特点

class Cat:
def __init__(self):
print("这是一个初始化办法")

# 界说用 Cat 类创立的猫目标都有一个 name 的特点
self.name = "Tom"
def eat(self):
print("%s 爱吃鱼" % self.name)
# 运用类名()创立目标的时分,会主动调用初始化办法 __init__
tom = Cat()
tom.eat()

4.4 改造初始化办法 —— 初始化的一起设置初始值

在开发中,假如期望在 创立目标的一起,就设置目标的特点,可以对 init 办法进行 改造

把期望设置的特点值,界说成 init 办法的参数

在办法内部运用 self.特点 = 形参 接纳外部传递的参数

在创立目标时,运用 类名(特点1, 特点2…) 调用

class Cat:
def __init__(self, name):
print("初始化办法 %s" % name)
self.name = name
...

tom = Cat("Tom")
...
lazy_cat = Cat("大懒猫")
...

05. 内置办法和特点

5.1 del 办法(知道)

在 Python 中

当运用 类名() 极彩官网-Pyhton面向对象根底语法创立目标时,为目标 分配完空间后,主动 调用 init 办法

当一个 目标被从内存中毁掉 前,会 主动 调用 del 办法

运用场景

init 改造初始化办法,可以让创立目标愈加灵敏

del 假如期望在目标被毁掉前,再做一些工作,可以考虑一下 del 办法

生命周期

一个目标从调用 类名() 创立,生命周期开端

一个目标的 del 办法一旦被调用,生命周期完毕

在目标的生命周期内,可以拜访目标特点,或许让目标调用办法

class Cat:

class Cat:
def __init__(self, new_name):
self.name = new_name
print("%s 来了" % self.name)
def __del__(self):
print("%s 去了" % self.name)
# tom 是一个全局变量
tom = Cat("Tom")
print(tom.name)
# del 关键字可以删去一个目标
del tom
print("-" * 50)

5.2 str 办法

在 Python 中,运用 print 输出 目标变量,默许情况下,会输出这个变量 引证的目标 是 由哪一个类创立的目标,以及 在内存中的地址(十六进制表明)

假如在开发中,期望运用 print 输出 目标变量 时,可以打印 自界说的内容,就可以使用 str 这个内置办法了

留意:str 办法有必要回来一个字符串

class Cat:
def __init__(self, new_name):
self.name = new_name
print("%s 来了" % self.name)
def __del__(self):
print("%s 去了" % self.name)
def __str__(self):
return "我是小猫:%s" % self.name
tom = Cat("Tom")
print(tom)
  • 天房发展(600322)融资融券信息(09-17)
  • 申能股份(600642)融资融券信息(09-17)
  • 请关注微信公众号
    微信二维码
    不容错过
    Powered By Z-BlogPHP