Python类的概念

news2024/11/19 23:18:13

类的技术名词解释

● 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
● 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
● 数据成员:类变量或者实例变量, 用于处理类及其实例对象的相关的数据。
● 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
● 局部变量:定义在方法中的变量,只作用于当前实例的类。
● 实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
● 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
● 实例化:创建一个类的实例,类的具体对象。
● 方法:类中定义的函数。
● 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

初识类

类有三大特性:继承、封装、多态
类是面向对象的编程思想,具体什么意思呢?举例来说,人有姓名、年龄、职业、工资等属性,以及人可以工作,健身,吃饭,睡觉等,我们可以把这些抽象出一个类,这个类下面有属性(姓名、年龄、职业、工资),有方法(工作,健身,吃饭,睡觉),我们所有人基本上都有这些属性,那么具体到某个人就是说是这个类的实例化对象。

创建一个类

class Person(object):
    # 类变量,类变量定义在类中且在函数体之外,可以直接用“类名.属性”调用
    sex = "男"

    def __init__(self, name, age):
        # _init__()方法称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法
        self.name = name
        self.age = age

    def work(self):
        print("人会工作")


print(Person.sex)
p = Person("张三", 12)
p.work()
  1. init()方法称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法
  2. sex变量属于类方法,可以直接被类名调用
  3. p = Person(“张三”, 12),这句属于实例化对象

类的属性

类属性

class Animal():
    url = "www.baidu.com"  # 类属性

实例属性

class Animal():
    url = "www.baidu.com"  # 类属性
    def __init__(self,age,name):  # 实例属性
        self.age = age
        self.name = name

私有属性

私有属性不能被子类调用,也不能被实例对象调用,两个下划线

__sex = "男"

类的方法

实例方法

不能用类名直接访问,可以被实例化对象访问

class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def work(self):
        print("人会工作")

print(Person.work())  #会报错,不能直接调用,需要先实例化对象,再调用

私有方法

不能用类名直接访问,也不能被类的实例化对象访问,只能在类里面可以访问

    def __eat(self):
        print("真会吃")

静态方法

用 @staticmethod 装饰的不带 self 参数的方法叫做静态方法,类的静态方法可以没有参数,方法后面的括号不需要加self,可以直接用类名访问,也可以被类的实例化对象访问。

class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @staticmethod
    def staticFunction():
        print("静态方法")

print(Person.staticFunction())

类方法

默认有个 cls 参数,需要加上 @classmethod 装饰器。
可以用类名直接访问,也可以被实例化对象访问,类方法可以访问静态方法,类方法可以访问类属性,类方法不能调用调用其它类方法的实例方法

class Animal():
    sex = "男"
    @classmethod
    def eat(cls):
        print("这是一个类方法")
        cls.run()  # 类方法可以访问静态方法
        print(cls.sex)  # 类方法可以访问类属性
        cls.speak(cls)  #类方法不能调用调用其它类方法的实例方法
    @staticmethod
    def run():
        print("这是一个静态方法")

    def speak(self):  # 实例方法
        print("这是一个实例方法")
        self.__rich()  # 私有方法在类里面可以访问

    def __rich(self):
        print("这是一个私有方法")

类的继承

主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类
比如有个基类叫Animal,那么我们还需要造一个Person类以及Cat类,人和猫是不是都属于动物,那我们可以通过继承动物的方法,可以使用父类里面的方法和属性,可以少些很多方法,这就是代码的重用思想。

# 类的继承
# 父类也叫基类或超类
class Animal(object):
    def __init__(self,name,age):
        print("父类的初始化方法")
        self.name = name
        self.age = age

    def speak(self):
        print("%s会说"%self.name)

    def eat(self):
        print("%s会吃"%self.name)


class Person(Animal):
    # 子类里面__init__方法没有,使用的是父类里面的初始化方法
    def speak(self):
        print("%s 会说人话"%self.name)

class Cat(Animal):
    # 子类把父类里面的方法重写了,没有用super是不会走到父类里面的初始化方法
    def __init__(self,name,skill):
        self.name = name
        self.skill = skill

    def speak(self):
        print("%s 会喵喵叫"%self.name)

class Dog(Animal):
    # 子类重写父类的init方法,并且需要走到父类的init方法,需要用到super方法
    def __init__(self,name,age,skill):
        super(Dog,self).__init__(name,age)
        self.skill = skill

d = Dog("旺财",2,"会招财")
d.speak()
p = Person("李四",20)
p.speak()
c = Cat("小花猫","抓老鼠")
c.speak()

类的多态

其实多态也叫方法重写,比如有个基类叫Animal,里面有个方法叫speak,还有Person类以及Cat类继承Animal类,人和猫都会叫,但是人是啊啊啊的叫,猫是喵喵喵地叫,我们看看以下的例子:

class Animal(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def speak(self):
        print("会动")


class Person(Animal):
    def speak(self):
        print(self.name, "啊啊啊~")


class Cat(Animal):
    def speak(self):
        print(self.name, "喵喵喵~")


p = Person("小明",10)
p.speak()
c = Cat("花猫", 20)
c.speak()

Python内置类属性

__name__方法

类名
在当前文件执行代码,__name__的值为"main", 如果为了调试代码,可以在当前文件下面加判断,在里面写上调试代码,其它文件引用该文件的时候不会执行判断里面的代码

class Animal(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

print(Animal.__name__)
print(__name__)
if __name__ == "__main__":
    print("此处写调试代码")

导入其它文件夹里面的类

在这里插入图片描述
比如我想从main.py文件里面导入test文件夹下面的animal.py里面的Animal类:
animal.py文件里面的代码:

class Animal(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age


print(__name__)

即使我们把实例化animal注释了,会执行animal.py里面的print(name),结果是test.animal,打印的是文件夹下面的某个文件,所以我们定义类的文件如果本身执行或者调试的话,做个判断,加上以下这句话:

if __name__ == "__main__":
    启动本文件执行的代码,别的地方引用的时候不会执行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1000982.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

功率放大器的定义详解

功率放大器是一种电子放大器,主要用于将输入信号的功率放大到足以驱动负载或输出器件所需的水平。通常,功率放大器会将低电平高电流的输入信号转换成高电平低电流的输出信号,以便给负载提供足够的功率。 功率放大器广泛应用于各种应用场合&am…

(Note)中文EI检索期刊目录

ei和sci、ssci一样是国际知名的期刊数据库,ei不仅收录国际知名的刊物,也收录了一些国内期刊,为方便投稿选刊,Elsevier官网更新了的EI Compendex期刊目录,那么 国内ei期刊有哪些? 经查询共有250余种期刊,新…

【LeetCode-面试经典150题-day23】

目录 108. 将有序数组转换为二叉搜索树 148.排序链表 427.建立四叉树 23.合并K个升序链表 108. 将有序数组转换为二叉搜索树 题意: 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二…

如何实现自己在家搭建全端口P2P穿透?快解析内网穿透

对于有公网主机,有一定的操作能力,需要独立资源配置使用的,可以选择自行搭建内网映射服务。那么如何实现自己搭建全端口P2P穿透呢?下面为大家提供了不同场景下的不同方法,供大家使用时参考。 SSH是一种安全的远程登录…

一个方法用js生成随机双色球、大乐透

代码如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><s…

【C++】构造函数分类 ① ( 构造函数分类简介 | 无参构造函数 | 有参构造函数 | 拷贝构造函数 | 代码示例 - 三种类型构造函数定义与调用 )

文章目录 一、构造函数分类1、构造函数分类简介2、构造函数分类代码分析无参构造函数有参构造函数拷贝构造函数 二、代码示例 - 三种类型构造函数定义与调用 一、构造函数分类 1、构造函数分类简介 C 构造函数可以分为以下几类 : 无参构造函数 : 最简单也是默认的构造函数 , 函…

gitlab在项目中创建自己的分支的顺序操作,一整套流程

gitlab在项目中创建自己的分支的顺序操作&#xff0c;一整套流程 目录概述需求&#xff1a; 设计思路实现思路分析 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better…

【C++】day4学习成果:仿写string类等等

1.仿照string类&#xff0c;完成myString 类 代码&#xff1a; #include <iostream> #include <cstring>using namespace std;class myString {private:char *str; //记录c风格的字符串int size; //记录字符串的实际长度public://无参构造myS…

C++学习之list的实现

在了解学习list实现之前我们首先了解一下关于迭代器的分类&#xff1a; 按功能分类&#xff1a; 正向迭代器 反向迭代器 const正向迭代器 const反向迭代器 按性质分类&#xff1a; 单向迭代器 只能 例如单链表 双向迭代器 可&#xff0c;也可-- 例如双…

酒店固定资产管理怎么分类

在酒店业中&#xff0c;固定资产的管理是至关重要的一环。它不仅影响到企业的运营效率和盈利能力&#xff0c;而且直接影响到客户体验和品牌形象。因此&#xff0c;对于酒店管理者来说&#xff0c;合理、有效地进行固定资产管理是一项必不可少的任务。本文将探讨酒店固定资产的…

Spring系列文章:Bean的获取⽅式

一、简介 Spring为Bean提供了多种实例化⽅式&#xff0c;通常包括4种⽅式。&#xff08;也就是说在Spring中为Bean对象的创建准 备了多种⽅案&#xff0c;⽬的是&#xff1a;更加灵活&#xff09; 第⼀种&#xff1a;通过构造⽅法实例化 第⼆种&#xff1a;通过简单⼯⼚模式…

c++day4---9.11

1.思维导图&#xff1a; 2.myString: #include <iostream> #include <cstring> #include <cstdlib>using namespace std;class myString { private:char *str; //记录c风格的字符串int size; //记录字符串的实际长度 public://无参构造m…

springboot之二:整合junit进行单元测试+整合redis(本机、远程)+整合mybatis

资源地址&#xff1a; 整合junit的代码&#xff1a;https://download.csdn.net/download/zhiaidaidai/88291527 整合redis的代码&#xff1a;https://download.csdn.net/download/zhiaidaidai/88291536 整合mybatis的代码&#xff1a;https://download.csdn.net/download/zh…

科研绘图,别忘Origin!

公众号&#xff1a;尤而小屋作者&#xff1a;Peter编辑&#xff1a;Peter 大家好&#xff0c;我是Peter~ 科研绘图&#xff0c;你一般用什么软件&#xff1a; Python&#xff1f;R&#xff1f;MATLAB&#xff1f;GraphPad Prism&#xff1f;Matplotlib&#xff1f; 但&#…

案例:实现TodoLis(尚硅谷)

是做完后再记录的&#xff0c;前端我主要是要了解下&#xff0c;所以这里记录的比较浅 由于是做完后记录&#xff0c;所以你cv后的代码的效果并不一定和我展示的效果图一样 静态页面 先来实现静态页面&#xff0c;再考虑动态页面 组件拆分 说明(实际的组件名不是和下面一样的…

记录第一次带后端团队

在过去的一个半月里我第一次作为后端开发组长角色参与公司项目从0到1的开发&#xff0c;记录这一次开发的经历。 1、背景介绍 首先说明一下背景。我所在的公司是做智慧社区相关业务&#xff0c;开发的项目是系统升级工具&#xff0c;方便公司实施同事安装和升级系统。 参与后…

安全可靠的文件传输服务助力完成更高效的医疗保健工作(下)

医疗保健事业是关乎人类健康和社会发展的重要领域&#xff0c;它需要依赖海量的医疗数据&#xff0c;如病人信息、医疗影像、化验结果、电子病历、诊断建议等。这些数据不仅关系到病人的个人利益和医疗质量&#xff0c;也关系到医院的运行效率和医疗水平。因此&#xff0c;如何…

荣耀崛起礼包码2023,荣耀崛起攻略

荣耀崛起是一款传统的卡牌手游&#xff0c;它将区域探索游戏无缝集成到卡牌游戏中。相信很多玩家都很好奇&#xff0c;荣耀崛起礼包码2023是什么&#xff1f;有没有给新手的一些攻略建议呢&#xff1f;下面小编就和大家简单分享一下&#xff0c;感兴趣的朋友&#xff0c;一起来…

uni-app(微信小程序)图片旋转放缩,文字绘制、海报绘制

总结一下&#xff1a; 要进行海报绘制离不开canvas&#xff0c;我们是先进行图片&#xff0c;文字的拖拽、旋转等操作 最后再对canvas进行绘制&#xff0c;完成海报绘制。 背景区域设置为 position: relative&#xff0c;方便图片在当前区域中拖动等处理。添加图片&#xff0…

一文掌握SSD、EMMC、UFS原理与差异

有一天&#xff0c;小明在他的智能手机上播放了一段高清视频&#xff0c;发现视频播放得非常流畅。他感叹道&#xff1a;“现在的存储技术真是太棒了&#xff01;”他的朋友小华却告诉他&#xff1a;“这还不算什么&#xff0c;你还没用过UFS呢&#xff01;”小明一下子好奇起来…