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 类和对象综合案例

目录
相关文章
|
4天前
|
Python
Python-类视图和蓝图
Python-类视图和蓝图
11 2
|
4天前
|
存储 Java 数据安全/隐私保护
Python----类对象和实例对象
Python----类对象和实例对象
9 2
|
5天前
|
存储 安全 Java
Python中的引用和赋值机制允许变量引用内存中的对象,并通过引用计数来管理对象的生命周期
【5月更文挑战第14天】Python中的变量是对象引用,不存储数据,而是在内存中创建对象。赋值操作创建新变量并使其指向已有对象。引用计数用于管理对象生命周期,引用数为0时对象被回收。理解这些机制对编写高效Python代码很重要。
18 6
|
5天前
|
Python
在Python中,类的属性可以分为公有属性和私有属性
【5月更文挑战第7天】Python类包含公有和私有属性。公有属性可直接外部访问,如`person.name`,而私有属性如`_name`需通过getter/setter方法访问,如`person.getName()`和`person.setName()`。私有属性用于封装数据、隐藏实现细节,增强代码可维护性和安全性。封装能灵活修改内部实现,不影响外部;安全性防止外部非法修改数据;一致性确保所有数据操作在类内完成,简化代码并减少错误。
28 10
|
5天前
|
Python
【Python 基础】Python中的实例方法、静态方法和类方法有什么区别?
【5月更文挑战第6天】【Python 基础】Python中的实例方法、静态方法和类方法有什么区别?
|
5天前
|
存储 程序员 Python
Python中自定义类实例化数组的艺术
Python中自定义类实例化数组的艺术
11 1
|
5天前
|
程序员 Linux C++
Python中的WinForms类桌面应用程序开发
Python中的WinForms类桌面应用程序开发
25 4
|
5天前
|
Java 开发者 索引
Python基础语法:类笔记
本篇博文是把自己在学习python类的过程中自己理解和笔记,一点一点总结的写出出来,做一个总结,加深对面向对象编程的理解。
|
2天前
|
Python
10个python入门小游戏,零基础打通关,就能掌握编程基础_python编写的入门简单小游戏
10个python入门小游戏,零基础打通关,就能掌握编程基础_python编写的入门简单小游戏
|
4天前
|
网络协议 Unix Python
Python编程-----网络通信
Python编程-----网络通信
8 1