python学习笔记15 python中的类

server/2024/12/27 2:40:22/

上一篇我们介绍了python中的库 ,学习了一些常见的内置库。详细内容可点击–>python学习笔记14 python中的库,常见的内置库(random、hashlib、json、时间、os)
这一篇我们来看一下python中的类

创建一个类
python">	class 类的名称():def __init__(self,参数1,参数2,...):代码块1def 方法名1(参数3,参数4,...):代码块2def 方法名2(参数5,参数6,...):代码块3...#特别注意:class类中的函数,
#        必须要有一个参数,且是第一个定义,self#self: 表示当前调用该方法的对象
# 定义一个类
class Person:def eat(self):print("吃饭")def call(self,name):print(f"打电话给{name}")
通过一个类创建一个对象
python">class Person:def eat(self):print("吃饭")def call(self,name):print(f"打电话给{name}")
# 相当于创建一个Person类的对象,将对象的地址值赋值给变量p1
p1 = Person()
p1.eat()    #吃饭
p1.call('王子奇')  #打电话给王子奇
通过一个类创建多个对象
python">class Person:def eat(self):print("吃饭")def call(self,name):print(f"打电话给{name}")
# 相当于创建一个Person类的对象,将对象的地址值赋值给变量p1
p1 = Person()
p1.eat()    #吃饭
p1.call('王子奇')  #打电话给王子奇
print("----------------------------")
p2 = Person() # 在内存中开辟一个新的空间
p2.eat()    #吃饭
p2.call('王俊凯')  #打电话给王俊凯
print(id(p1)==id(p2)) # False 地址值不同
给对象赋予属性
  • 类中不写,创建对象的之后,单独为该对象创建新的属性
python">class Person:def eat(self):print("吃饭")def call(self,name):print(f"打电话给{name}")p1 = Person()
p1.name = '小虎'
print(f"p1对象的姓名为:{p1.name}")p2 = Person() # 在内存中开辟一个新的空间
# print(f"p1对象的姓名为:{p2.name}") # 报错
  • 类中编写,创建对象的时候,直接就拥有了某个属性,并且可以直接赋值
python">class Person:def __init__(self,name):# self.name 定义一个类中的属性,叫做nameself.name = namedef eat(self):print("吃饭")def call(self,name):print(f"打电话给{name}")# 使用类名() 的方式创建对象,实际上底层调用的是类中的__init__(self)
# 若自己没写,默认一个类中有一个__init__(self),且只能有一个
p1 = Person('小虎')
print(f"p1对象的姓名为:{p1.name}")    #p1对象的姓名为:小虎p2 = Person('张三')
print(f"p2对象的姓名为:{p2.name}")    #p2对象的姓名为:张三

练习题:

手机:
属性: 品牌, 价格, 颜色
行为:打电话, 发短信

python">class Phone():def __init__(self,brand,price,color):self.brand=brandself.price=priceself.color=colordef call(self,name):print(f"正在打电话给{name}...")def send_message(self,name,text):print(f"给{name}发短信了,短信内容是:{text}")if __name__ == '__main__':p1=Phone('HUAWEI',9999,"宝石蓝")p1.call('王俊凯')p1.send_message('王俊凯','你什么时候开演唱会')p2=Phone('XIAOMI',5999,"钻石白")p1.call('王子奇')p1.send_message('王子奇', '和黄景瑜在拍一个剧吧')
类的继承

继承是将多个类中的相同的部分,单独提取到一个类中,这些类于单独提出来的这个类产生一个关系,这个关系,就叫做继承关系,其他类中也就拥有了相同的部分,不需要特地定义出来。

通过继承,子类拥有了父类中的成员。

python">class 父类:pass
class 子类(父类):pass
python">class Student:def __init__(self,id,name,age):self.id=idself.name=nameself.age=agedef __str__(self):return f'Student:({self.id},{self.name},{self.age})'def study(self):print(f'{self.name}学习')def play(self):print(f'{self.name}在玩')
class PrimaryStudent(Student):pass
class HighStudent(Student):pass
stu1=PrimaryStudent('20240001','图图',8)
stu1.study()
stu1.play()
stu2=HighStudent('20240002','莉莉',15)
stu2.study()
stu2.play()

在这里插入图片描述

特别注意:

  1. 子类无法继承父类中私有的成员

    python">class Fu:def fun1(self):print("好好学习,天天向上!")def __fun2(self):print("这是父类中私有的成员函数__fun2")
    class Son(Fu):pass
    s1 = Son()
    s1.fun1()
    s1.__fun2()
    

    在这里插入图片描述

  2. 若子类中出现与父类的函数名以及函数参数都一样,只是实现不一样的情况,子类对象调用的是自己的函数

    python">class Fu:def fun1(self):print("好好学习,天天向上!")def __fun2(self):print("这是父类中私有的成员函数__fun2")def fun3(self):self.__fun2()
    class Son(Fu):def fun1(self):print("这是子类中的函数fun1")pass
    s1 = Son()
    s1.fun1()
    

    在这里插入图片描述

  3. 子类中可以定义父类中没有的成员属性

    python">class Fu:def __init__(self,name,age):self.name = nameself.age = age
    class Zi(Fu):def __init__(self, name, age, sid):super().__init__(name,age)self.sid = sid
    z1 = Zi('张三',18, 1001)
    print(z1.name,z1.age,z1.sid)    #张三 18 1001
    
  4. 子类继承父类的同时,可以出现父类中没有的行为

    python">class Fu2:def fun1(self):print("shujia")
    class Zi2(Fu2):def show(self):print("shujia666")
    # d1 = Fu2()
    # d1.fun1()
    # d1.show() #报错
    d2 = Zi2()
    d2.fun1()
    d2.show()
    

    在这里插入图片描述

  5. 子类中可以使用super()来调用父类中非私有的成员

    python">class Fu:def fun1(self):print("这是父类中的fun1")
    class Zi(Fu):def fun1(self):print("这是子类中的fun1")def show(self):self.fun1() # 调用的是子类中重写后的fun1函数# 调用父类中的fun1super().fun1()
    z = Zi()
    z.show()
    

    在这里插入图片描述

  6. python中一个类可以同时继承多个类

    python">class Fu:def fun1(self):print("这是父亲中的函数fun1")
    class Mather:def fun2(self):print("这是母亲中的函数fun2")
    class Son(Fu, Mather):def fun3(self):print("这是儿子自己的函数")
    s1 = Son()
    s1.fun1()
    s1.fun2()
    s1.fun3()
    

    在这里插入图片描述

    若同时继承的类中有相同的函数名,谁先写就调用谁的

    python">class Fu:def fun1(self):print("这是父亲中的函数fun1")def show(self):print("这是父亲中的函数show")
    class Mather:def fun2(self):print("这是母亲中的函数fun2")def show(self):print("这是母亲中的函数show")
    class Son(Mather,Fu):def fun3(self):print("这是儿子自己的函数")
    s1 = Son()
    s1.fun1()
    s1.fun2()
    s1.fun3()
    s1.show() # 调用的是母亲中的show
    

    在这里插入图片描述

多态

表示的是某一个事物在不同时刻下的不同状态

python中默认支持多态,因为python是动态数据类型语言。

python">class Animal:def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):return f"name:{self.name}, age:{self.age}"def eat(self):print("吃")def sleep(self):print("睡")
#抽象
class Dog(Animal):pass
a1 = Animal('小黄',2)
a1 = Dog('小黑',3)
print(a1)   #name:小黑, age:3
抽象
python">from abc import abstractmethod
# from typing import override
class Animal:def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):return f"name:{self.name}, age:{self.age}"@abstractmethoddef eat(self):pass@abstractmethoddef sleep(self):passclass Dog(Animal):# @overridedef eat(self):print("🐕吃🥩")# @overridedef sleep(self):print("🐕趴着睡")# a1 = Animal('小黄',2)
a1 = Dog('小黑',3)
a1.eat()    #🐕吃🥩
a1.sleep()  #🐕趴着睡
类变量

将变量定义在类中函数外

python">class Demo1:
# 类变量a = 100def fun1(self):a = 10print(a)print(Demo1.a) # 通过类名直接访问
d1 = Demo1()
d1.fun1()
print(d1.a) # 也可以通过对象名进行访问

在这里插入图片描述
下一篇我们来几个关于类的练习题结束我们python的基础语法内容啦。
我们即将进入python的进阶内容,数据分析numpy、pandas、matplotlib的学习
点赞收藏关注,一起打卡python学习


http://www.ppmy.cn/server/147585.html

相关文章

【Linux】匿名管道通信场景——进程池

🔥 个人主页:大耳朵土土垚 🔥 所属专栏:Linux系统编程 这里将会不定期更新有关Linux的内容,欢迎大家点赞,收藏,评论🥳🥳🎉🎉🎉 文章目…

【Word 知识点】

快捷键 1.复制 Ctrlc 2.粘贴 Ctrlv 3.剪切 Ctrlx 4.全选 Ctrla 5.加粗 Ctrlb 6.打开 Ctrlo 7.新建 Ctrln 8.保存 Ctrls 9.查找 Ctrlf 10.替换 Ctrlh Word 要点 1.文档基本操作: 新建 打开 保存 复制 粘贴 剪切 查找 替换 2.字体:字体 字号 颜…

《山海经》:东山

《山海经》:东山 樕[朱{虫虫}(上下)]山(鳙鳙鱼:形像犁牛发出猪叫)藟山栒状山(从从:形状像狗,六条腿)勃亝山番条山姑儿山高氏山岳山山(状夸父)独山&#xff08…

计算机网络安全

从广义来说,凡是涉及到网络上信息的机密性、报文完整性、端点鉴别等技术和理论都是网络安全的研究领域。 机密性指仅有发送方和接收方能理解传输报文的内容,而其他未授权用户不能解密(理解)该报文报文完整性指报文在传输过程中不…

【Open-Fegin使用介绍】

文章目录 OpenFegin的介绍OpenFegin使用1.导入配置2. 开启OpenFegin3.配置OpenFeigin的类4.OpenFegin的使用 FeginClien注解 OpenFegin的介绍 OpenFeign 是一个声明式的Web服务客户端,它使得编写Web服务客户端变得更加容易。OpenFeign 旨在整合Ribbon和Nacos&#…

用“*”构成一个倒三角形:JAVA

输入:5 输出: ******* ***** *** * 代码: import java.util.Scanner; //倒三角 public class FF6 {public static void main(String[] args) {Scanner scannernew Scanner(System.in);while (scanner.hasNextInt()){int nscanner…

Ubuntu 安装Ansible ansible.cfg配置文件生成

安装后的ansible.cfg后的默认内容如下: rootlocalhost:/etc/ansible# cat ansible.cfg # Since Ansible 2.12 (core): # To generate an example config file (a "disabled" one with all default settings, commented out): # $ ansible-…

Wwise 使用MIDI文件、采样音频

第一种:当采样音频只有一个文件的时候 1.拖入MIDI文件到Interactive Music Hierarchy层级 2.拖入采样音频到Actor-Mixer Hierarchy层级 3.勾选MIDI显示出面板,设置Root Note与采样音频音高相同,这里是C#5 4.播放测试,成功&…