当前位置: Python基础教程 > 07-面向对象a > 阅读正文

python的类与对象

2021.6.20.   525 次   1803字

python支持面向对象, 其中的概念和其他编程语言相同

类, 在python中, 和模块差不多, 可以理解为工具包, 被导入使用, 但又不是完全相同

类与面向对象

类的定义, 来源于生活, 比如人类, 鸟类, 是一种抽象的定义( 并不是一个真实的个体), 但又确实有特定的行为和特征. 比如人类不是指你或者我, 但一说到人类, 就会想到, 一对手一对脚, 直立行走, 吃饭说话等

在类中, 有2个重要的东西, 分别是:

  • 特征 –> 主要是指一些静态的东西, 比如头, 耳朵, 等等, 这里的静态指的是主观静态, 仅仅表示存在这样一个东西, 在类中表示为属性
  • 行为 –> 主要是主观动态的东西, 比如人可以说话, 这是一个能力, 在类中表示为方法

其实, 这跟模块非常相似, 参考以前学的random模块,

  • 面向过程 –> 生成随机数, 手动写代码实现
  • 面向对象 –> 生成随机数, 找工具包实现

适当的把代码封装成类, 可以把长代码恰当的划分, 逻辑更清晰

ps: 在python中, 基础的数据类型也是类, 比如整型类, 列表都可以理解为一种”类”, 在ipython中, 可以使用dir(变量)来查看所有的属性和方法, 内置方法名(__方法名__)

一些常见的内置方法

__new__创建对象时, 被自动调用
__init__对象初始化时, 被自动调用
__del__对象销毁前, 被自动调用
__str__返回对象的描述信息, print函数默认调用

__str__相当于其他语言的toString()方法, 默认打印16进制地址

类的设计

命名是一个重要哲学, 在python中, 类应该满足大驼峰命名策略

所谓大驼峰命名, 是指每个单词的首字母都是大写的, 比如 KeyWord, DataUtils, 单词中间没有下划线分隔

此外, 要考虑属性和方法, 也就是类中有什么特征和方法

类基本定义语法

仅包含方法的类定义如下, 先记住方法第一个参数必须是self

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

和模块不同的是, 类不能直接被调用, 而是必须对象调用, 这里暂不细说, 简单格式为

对象变量 = 类名()

类定义实例

class Person:
    def eat(self, something):
        print("吃:"+something)
    def sleep(self, hours):
        print("每天睡:"+str(hours)+"小时")

#调用类, 创建对象
xiaoming = Person()
xiaoming.eat("水果")
xiaoming.sleep(8)

#一个类可以创建无数对象, 可以看成是一个模板
xiaohong = Person()
xiaohong.eat("牛奶")
xiaohong.sleep(10)

类的属性

属性, 是类的重要组成之一, python的类属性, 和其他编程语言有一些不太一样

在python中, 可以直接使用 .属性名 的方式, 调用, 修改, 或增加

例如, 以下实例

xiaoming.name="小明"
print(xiaoming.name)
xiaoming.name="大明"
print(xiaoming.name)

但是, 这种方式是不推荐的, 这样仅仅作用于对象实例上, 而没有在类上

定义在类上, 语法大概是这样

class 类名:
    
    变量1 = 值1
    变量2 = 值2

    def 方法1(self):
        pass

    def 方法2(self):
        pass

定义在类中, 与类方法并排的叫类属性, 但这样的成员属性很不灵活, 下一节将和类构造方法一起讲解

ps: 类的属性, 往往也叫成员变量, 类的方法, 也叫成员方法

python的对象

对象, 是一个类的实例, 也即是一个真实的个体

例如, 人类是模糊的概念, 那么”张三”就是一个真实个体, 前者是类, 后者是对象

对象由类创建而来, 上面的例子就有用到, 比如

class Person:
    def eat(self, something):
        print("吃:"+something)
    def sleep(self, hours):
        print("每天睡:"+str(hours)+"小时")

#调用类, 创建对象
zhangsan= Person()   #zhangsan是一个对象
lisi = Person()      #lisi也是一个对象

对象必须由类创建而来, 对象是真实占有内存的, 而类是创建对象的模板, 它们是互相依存的, 简单理解为: 没有类就无法创建对象, 没有对象就无法真正执行

其实类和对象都只是一个称呼而已, 每一样真实存在的都可以是对象, 每一种抽象的东西都可以理解为类。

本篇完,还有疑问?

加入QQ交流群:11500065636 IT 技术交流群