当前位置: 首页 > news >正文

Python面向对象程序设计

目录

一、类和对象

二、Python中的类

三、对象的比较

1、python中的类的比较

2、自定义类的比较

四、静态属性和静态方法

五、集合元素和字典的键中的对象

1、集合元素和字典的键

2、object类

3、关系


一、类和对象

①类就是用来代表事物的,对于一种事物,可以设计出一个类,来概括出这个事物的属性,这个属性用成员变量表示,还要有对应的这个事物能进行的操作,我们用成员函数来表示

②成员变量也称类的“属性”,而成员函数也称类的“方法”

③类的示例,称为“对象”,类代表一种事物的共同特点,对象就是一个具体的事物的个体

  • 类(Class):是一个模板,定义了某种事物的共同特征(成员变量)和行为(成员函数)

  • 成员变量(Attributes):是类中用来存储数据的变量,表示对象的状态。

  • 成员函数(Methods):是类中定义的函数,表示对象的行为。

  • 对象(Object):是类的具体实例,它包含了类定义的所有成员变量和成员函数。

例子:

class Animal:def __init__(self, name):self.name = name#这个名字就是成员变量def make_sound(self):pass#这个叫声就是成员函数class Dog(Animal):def make_sound(self):return "汪"class Cat(Animal):def make_sound(self):return "咪咪咪"class Human(Animal):def make_sound(self):return "呀呼"#以上三个就是类的定义,每一个里面包含了一个成员函数dog = Dog("Dog")
cat = Cat("Cat")
human = Human("Human")#类的实例化print(dog.name, "的叫声是:", dog.make_sound())
print(cat.name, "的叫声是:", cat.make_sound())
print(human.name, "的叫声是:", human.make_sound())

中间的三个类可以看成最上面那个抽象类的子类

一个类包含成员变量和成员函数,我们通过继承,来使他具象一些,所有Animal就是抽象类,剩下三个就是具体类

二、Python中的类

类型名即是类名,如float,str等

小数,复数,字符串,元组,列表,集合,字典等组合数据类型的常量,都是对象,函数也是对象,但整数常量不是对象

而我们之前学到的库,如turtle,jieba等,都是一个类

三、对象的比较

1、python中的类的比较

在Python中的所有类,以及自己自定义的类,都有__eq__方法

x == y 的值,就是x.__eq__(y)的值,如果x.__eq__(y)没定义,就是y.__eq__(x)的值,如果两者都没定义,那么 x == y 也没定义

x != y 的值,就相当于x.__ne__(y)的值,等价于 not x.__ne__(y)

下面还有几个比较方面的类:

代码对应的类
a < ba.__lt__(b)
a > ba.__gt__(b)
a <= ba.__le__(b)
a >= ba.__ge__(b)

以上涉及的不包括整数型常量

2、自定义类的比较

默认情况下,一个自定义的a.__eq__(b)方法,功能是判断两者是不是相等

默认情况下,一个自定义的对象不能比较其大小,因为那些方法都被Python设置成了None

默认情况下虽然不能进行比较大小,但是我们可以通过方法重写来使得我们可以进行大小的比较

例子:

class point :def __init__(self , x , y = 0):self.x , self.y = x , ydef __eq__(self, other):return self.x == other.x and self.y == other.y      #进行了重写def __lt__(self, other):if self.x == other.x :return self.y < other.yelse :return self.x < other.xa , b = point(1 , 2) , point(1 , 2)
print(a == b)
print(a != b)
print(a < point(1 , 3))

在上面的代码中,我们对eq方法进行了重写,使得我们自己定义的这个类可以进行大小的比较,我们看看输出:

我们可以看见这个是可以进行判断相等和大小比较的:

如果我们把eq方法注释掉,就是默认的eq方法:

此时上面两个输出就完全相反

四、静态属性和静态方法

①静态属性被所有对象所共享,一共就一份

②静态方法不是作用在具体的某个对象上,它不会受所在类的参数的限制,且它不能访问非静态属性

③静态方法和静态属性的存在,就是为了减少全局变量和全局函数

我们下面来举一个例子具体指出静态变量和静态方法是什么样子的:

class employee :total_salary = 0    #----这就是静态变量def __init__(self , name , income):self.name = nameself.income = incomedef pay(self , salary):self.income += salary       #个人工资employee.total_salary += salary     #总和@staticmethod    #这就是静态方法def print_total_salary():print(employee.total_salary)e1 = employee("Tom" , 0)
e2 = employee("LiHua" , 0)e1.pay(1000)
e2.pay(1500)employee.print_total_salary()
e1.print_total_salary()
e2.print_total_salary()     #访问的都是print_total_salary()函数,所以输出一样

输出:

五、集合元素和字典的键中的对象

1、集合元素和字典的键

在Python中,能作为集合元素和字典的键的条件,是这个东西可哈希

如果hash(x)有定义,这个x就是可哈希的

如果x是整型常量,则hash(x)= x 

如果x不是整型常量,则hash(x)= x.__hsah__()

object类有__hsah__()方法,返回值是一个整数

2、object类

所有类都是都是object类的派生类,因而具有object类的各种属性和方法

我们可以通过dir函数来查看一个类的方法:

class Example :def func(self):passprint(dir(Example))

3、关系

①字典和集合都是“哈希表”数据结构,根据元素的哈希值为元素找存放的“槽”,哈希值可以看作是槽的编号

②若a,b两个对象的哈希值不同,则可以作为同一个集合里面的元素,以及同一个字典里的两个键

③若a,b两个对象的哈希值一样,但是a == b不成立,则也可以作为同一个集合里面的元素,以及同一个字典里的两个键

④自定义的对象,默认情况下哈希值是根据对象的id进行计算哈希值的,所以两个对象,只要a is b不成立,两者的哈希值就不一样

⑤可通过重写自定义类的__hash__()方法,使得对象的值和对象的哈希值不是和id相关,这样值相同的对象就不能在一个字典和集合中了

⑥一个自定义类,只有在重写了eq方法,但是没有重写hash方法的情况下,才是不可哈希的

以上就是Python面向对象程序设计的全部内容:)

相关文章:

  • FreeRTos学习记录--1.工程创建与源码概述
  • 深度学习预训练和微调
  • WWW2025 快手最新论文 T2Diff 解读:生成式扩散模型+混合注意力打造高效推荐
  • Synopsys:printvar命令和puts/echo命令的区别
  • Vue3---(9)组件间通信
  • 【基于WSAAsyncSelec模型的通信程序设计】
  • 每天学一个 Linux 命令(29):tail
  • JavaScript 中的单例模式
  • 单例模式(线程安全)
  • Uniapp 自定义TabBar + 动态菜单实现教程(Vuex状态管理详解)
  • Nginx详细使用
  • 乐家桌面安卓版2025下载-乐家桌面软件纯净版安装分享码大全
  • buildadmin 自定义单元格渲染
  • AOSP Android14 Launcher3——点击桌面图标启动应用动画流程
  • Docker安装beef-xss
  • Python3网络爬虫开发--爬虫基础
  • 多语言商城系统开发流程
  • 【Easylive】consumes = MediaType.MULTIPART_FORM_DATA_VALUE 与 @RequestPart
  • 【英语语法】词法---连词
  • Spring是如何实现资源文件的加载
  • 锚定“水库不垮坝”目标,水利部部署今年水库安全度汛工作
  • 跑马,一场对机器人的长测试
  • 泸州市长余先河已任四川省委统战部常务副部长
  • 凭春晚分会场爆火的无锡,为何请来了上海主流媒体和网络大V
  • 突然手抖心慌?低血糖的“死亡连锁反应”,3步急救法必看
  • 提升青春期+亲子含量:社区商业综合体这样用好“二次元”