Python中的类与对象

简介: Python中的类与对象

1 认识类与对象

在实际的生活中,每个学生都会有一个学号,一个名字,一个年龄,一个性别等属性!学生都会有一些相同的行为,比如吃饭,睡觉。那么对于这些共有的属性和行为,我们可以把这些共有的属性和行为抽取出来,形成一个模板,这就是类!就相当于是一张图纸,而对象就是根据图纸建造出来的实体!


类的语法格式

class 类名:
    成员变量
    成员方法(函数)

创建对象的格式

对象名 = 类名()

例子如下:

class Student:
    name = None
    Id = None
    age = None
    Sex = None

    def Eat(self):
        print("共有的行为吃饭")

    def Sleep(self):
        print("共有的行为睡觉")

    def running(self,hour,minute,second):
        print(f"{self.name}的跑步时间是{hour}时{minute}分{second}秒")

S1 = Student() #创建对象
#初始化对象的成员变量
S1.name = '张三'
S1.Id = '001'
S1.age = '18'
S1.Sex = '男'
#调用成员方法
S1.Eat()
S1.running(0,10,10)

注意:

1️⃣只要是成员方法,那么它的第一个参数必须是self,相当于C++中的隐藏this指针

2️⃣在调用成员方法时,self是自动默认传过去的,不可以显式的传过去

3️⃣访问成员变量必须通过self去访问,否则是访问不了的


2 构造函数

创建一个对象就要一行一行的去初始化,是不是太过于麻烦了,我们可以通过构造方法来进行初始化!构造函数就是帮助我们进行对象的初始化!它会在创建的时候就会自动调用构造函数,它的格式如下:

__(两条下划线后面也是两条下划线)init__(self,其他参数)

例子如下:

class Student:
    name = None
    Id = None
    age = None
    Sex = None

    def Eat(self):
        print("共有的行为吃饭")

    def Sleep(self):
        print("共有的行为睡觉")

    def running(self, hour, minute, second):
        print(f"{self.name}的跑步时间是{hour}时{minute}分{second}秒")

    #构造函数的使用
    def __init__(self,name,Id,age,Sex):
        #构造函数里也可以定义成员变量,这样前面的成员变量也可以不用定义
        self.name = name
        self.Id = Id
        self.age = age
        self.Sex = Sex


S1 = Student("张三","001",18,"男")  # 创建对象,并且自动调用构造函数
S1.Eat()
S1.running(0, 10, 10)

3 常见的内置方法

在python中,对于类和对象提供了一系列内置方法供我们进行使用!在此,我们只介绍几个比较常用的内置方法,例子如下:

class Student:
    name = None
    age = None

    def __init__(self,name,age):
        self.name = name
        self.age =age

    #可以将对象中的内容以字符串的形式输出  返回一个字符串类型
    def __str__(self):
        return f"你的名字是{self.name},你的年龄是{self.age}"

    #比较两个对象之间的大于或者是小于 返回值得到的是一个bool类型
    def __lt__(self,other):
        return self.age>other.age

    #比较小于等于或者是大于等于 返回值是一个布尔类型
    def __le__(self, other):
        return self.age>=other.age

    #用于两个类对象之间的相等比较 返回值是一个布尔类型
    def __eq__(self, other):
        return self.age == other.age

S1 = Student("张三",17)
S2 = Student("李四",18)
print(S1)
print(S1<S2)

4 封装

和其他语言类似,如果我们不想让别人访问到类中的成员变量或者是成员方法,在python中,我们可以在成员变量名或者是成员函数名前面加上两条下划线!通过这种方法来实现对某些成员变量和方法的封装!

例子如下:

这样的成员变量和成员方法,通过外部是访问或者调用不到的,但是我们可以通过写一个外部访问的到的成员函数来访问私有的成员变量或者是私有的方法!


5 继承

简单来说,继承就是一个类去继承了另一个类的成员变量和成员方法。去继承的类叫做子类,被继承的类一般被称为父类

语法如下:
class 子类类名(父类1,父类2……):
    成员变量
    成员方法

举个简单的例子如下所示:

class people:
    age = 10
    sex = "男"
    def running(self):
        print("会跑步")
class fish:
    length = 10
    age = 1

    def swim(self):
        print("会游泳")
class robot(people,fish):
    height = 1
    weight = 1
robot1 = robot()
robot1.running()
robot1.swim()
print(robot1.age)

关于继承有以下几个特点:


1️⃣继承可以有单继承也可以有多继承,多继承就是继承的父类不止有1个

2️⃣在继承中,可以通过子类对象来调用父类的成员变量和成员函数

3️⃣在多继承中,如果存在几个父类有相同的成员变量和成员函数,并且子类中没有这种成员变量和函数!那么就会根据继承的优先顺序(从左往右继承的优先级递减),来调用父类中的成员变量或者是成员函数!

4️⃣如果子类使用父类的成员变量或者是成员函数就已经足够了,我们可以使用pass语句来实现语法的填补!


有人认为父类的成员变量或者是成员方法写的并不够太好啊,此时我们就可以通过在子类中定义和父类一样同名的成员变量和成员函数,这就叫做复写,也就可以实现自己想要得到的成员变量和成员方法了

class father:
    set = '父类成员变量'

    def test(self):
        print("父类成员函数")

class son(father):

    set = '子类成员变量'

    def test(self):
        print("子类成员函数")

son1 = son()
print(son1.set)
son1.test()

复写之后是否还可以进行调用父类的成员变量或者是成员函数嘛!当然可以继续使用父类中的成员变量和成员函数


在子类中去调用父类的成员变量和成员方法:

方式一:父类名.成员变量/父类名.成员函数(self) 注:这里的self一定要显式的加上

方式二:super().成员变量/super().成员函数()

class father:
    set = '父类成员变量'

    def test(self):
        print("父类成员函数")

class son(father):

    set = '子类成员变量'

    def test(self):
        #方式一
        print(father.set)
        father.test(self)#调用父类的成员方法
        #方式二
        print(super().set)
        super().test()#调用父类的成员方法


son1 = son()
print(son1.set)
son1.test()

6 类型注解

所谓的类型注解,就是我们可以显式的定义变量,可以让pycharm快速的识别到这个是什么类型的,这样就可以调用这种类型对应的操作

#变量的类型注解
var_1:int = 1
var_2:str = 'abc'
#说明列表中全是整形
var_3:list[int] = [1,2,3,4]
#元组中设置类型详细注解,可以一一标注起来
var_4:tuple[str,int,int]=('abc',11,234)
#字典中进行类型注解,一个标注key,另一个标注value
var_5:dict[str,str]={"name":"张三"}
#自定义类型
var_6:student = student()
#函数的类型注解
def test(s1:int) -> int:  #-> int 表明返回值的类型
    return 10
print(test(2))
#Union联合注解
#导包
from typing import Union

#Union 联合类型注解
#说明key都是str类型,vakue是str或者是int类型
var_1:dict[str,Union[str,int]] ={"name":"张三","age":20}

def test() ->Union[int,str]:  #返回类型是int或者是str
    return 'str'

7 多态

简单来说多态就是传入不同的类对象,调用同一方法,而表现出不同行为的特点

class Animal:
  #父类的方法中不做具体实现,具体的实现交给子类去实现,这个叫做抽象方法,所在的类就是抽象类
    def speak(self):
        pass
class cat(Animal):
    def speak(self):
        print("猫会喵喵喵")
class dog(Animal):
    def speak(self):
        print("狗会汪汪汪")

def fun(animal:Animal):
    animal.speak()

dog = dog()
cat = cat()
fun(dog)
fun(cat)

甚至可以不在继承关系中,也就是我们所说的鸭子类型,只要该类对象中实现了一样的方法可以进行调用

class Animal:
    def speak(self):
        pass
class cat(Animal):
    def speak(self):
        print("猫会喵喵喵")
class dog(Animal):
    def speak(self):
        print("狗会汪汪汪")

def fun(animal:Animal):
    animal.speak()

class Duck:
    def speak(self):
        print("gagaga")

dog = dog()
cat = cat()
Duck = Duck()
fun(dog)
fun(cat)
fun(Duck)


8 类和对象综合案例

目录
相关文章
|
6天前
|
安全 大数据 程序员
Python operator模块的methodcaller:一行代码搞定对象方法调用的黑科技
`operator.methodcaller`是Python中处理对象方法调用的高效工具,替代冗长Lambda,提升代码可读性与性能。适用于数据过滤、排序、转换等场景,支持参数传递与链式调用,是函数式编程的隐藏利器。
23 4
|
1月前
|
安全 JavaScript Java
Python中None与NoneType的真相:从单例对象到类型系统的深度解析
本文通过10个真实场景,深入解析Python中表示“空值”的None与NoneType。从单例模式、函数返回值,到类型注解、性能优化,全面揭示None在语言设计与实际编程中的核心作用,帮助开发者正确高效地处理“无值”状态,写出更健壮、清晰的Python代码。
146 3
|
1月前
|
Python
解决Python中AttributeError:'image'对象缺少属性'read_file'的问题策略。
通过上述策略综合考虑,您将能够定位问题并确定如何解决它。记住,Python社区很庞大,也很乐于帮助解决问题,因此不要害怕在求助时提供尽可能多的上下文和您已经尝试过的解决方案。
70 0
|
5月前
|
Python
解决Python报错:DataFrame对象没有concat属性的多种方法(解决方案汇总)
总的来说,解决“DataFrame对象没有concat属性”的错误的关键是理解concat函数应该如何正确使用,以及Pandas库提供了哪些其他的数据连接方法。希望这些方法能帮助你解决问题。记住,编程就像是解谜游戏,每一个错误都是一个谜题,解决它们需要耐心和细心。
259 15
|
5月前
|
安全 测试技术 开发者
Python中的“空”:对象的判断与比较
在Python开发中,判断对象是否为“空”是常见操作,但其中暗藏诸多细节与误区。本文系统梳理了Python中“空”的判定逻辑,涵盖None类型、空容器、零值及自定义对象的“假值”状态,并对比不同判定方法的适用场景与性能。通过解析常见误区(如混用`==`和`is`、误判合法值等)及进阶技巧(类型安全检查、自定义对象逻辑、抽象基类兼容性等),帮助开发者准确区分各类“空”值,避免逻辑错误,同时优化代码性能与健壮性。掌握这些内容,能让开发者更深刻理解Python的对象模型与业务语义交集,从而选择最适合的判定策略。
194 5
|
5月前
|
人工智能 Python
[oeasy]python083_类_对象_成员方法_method_函数_function_isinstance
本文介绍了Python中类、对象、成员方法及函数的概念。通过超市商品分类的例子,形象地解释了“类型”的概念,如整型(int)和字符串(str)是两种不同的数据类型。整型对象支持数字求和,字符串对象支持拼接。使用`isinstance`函数可以判断对象是否属于特定类型,例如判断变量是否为整型。此外,还探讨了面向对象编程(OOP)与面向过程编程的区别,并简要介绍了`type`和`help`函数的用法。最后总结指出,不同类型的对象有不同的运算和方法,如字符串有`find`和`index`方法,而整型没有。更多内容可参考文末提供的蓝桥、GitHub和Gitee链接。
120 11
|
8月前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
345 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
6月前
|
存储 C语言 Python
[oeasy]python077_int类型怎么用_整数运算_integer_进制转化_int类
本文主要讲解了Python中`int`类型的应用与特性。首先回顾了`int`词根的溯源,探讨了整型变量的概念及命名规则(如匈牙利命名法)。接着分析了整型变量在内存中的存储位置和地址,并通过`type()`和`id()`函数验证其类型和地址。还介绍了整型变量的运算功能,以及如何通过`int()`函数将字符串转化为整数,支持不同进制间的转换(如二进制转十进制)。此外,文章提及了关键字`del`的使用场景,对比了Python与C语言中`int`的区别,并总结了整型与字符串类型的差异,为后续深入学习奠定基础。
109 1
|
9月前
|
存储 数据处理 Python
Python如何显示对象的某个属性的所有值
本文介绍了如何在Python中使用`getattr`和`hasattr`函数来访问和检查对象的属性。通过这些工具,可以轻松遍历对象列表并提取特定属性的所有值,适用于数据处理和分析任务。示例包括获取对象列表中所有书籍的作者和检查动物对象的名称属性。
189 2
|
9月前
|
缓存 监控 算法
Python内存管理:掌握对象的生命周期与垃圾回收机制####
本文深入探讨了Python中的内存管理机制,特别是对象的生命周期和垃圾回收过程。通过理解引用计数、标记-清除及分代收集等核心概念,帮助开发者优化程序性能,避免内存泄漏。 ####
207 3

推荐镜像

更多