python --对象属性、类属性、类方法和静态方法

news2024/12/24 4:48:50

对象属性和类属性

--掌握--对象属性

==目标==掌握对象属性的使用

对象属性,有时也称实例属性、普通属性、公有属性 、或者直接叫属性

在类内部,访问对象属性语法:

self.对象属性名

在类外部,访问对象属性语法:

对象名.对象属性名

例如: 

(1)定义一个手机类,属性有品牌、颜色;

(2)分别试着在类内部和类外部访问属性。

# 1.定义手机类
# 2.内部访问
class Phone(object):
    def __init__(self,color,brand):   #  构造器
        # 对象名.属性名
        self.color = color   # 对象属性
        self.brand = brand   # 对象属性

    def show(self):
        print(f"访问车的颜色:{self.color}")

# 3.外部访问
phone = Phone("黑色","Audi")
print(f"颜色:{phone.color}")
print(f"品牌:{phone.brand}")

==总结:==

(1)在类外部要访问对象属性,语法:(  A ).属性名;==A、对象名==;B、类名;

(2)在类内部要访问对象属性,语法:self.属性名。

--了解--类属性

==目标==了解类属性的简单使用

类属性指的是:类所拥有的属性,在整个类中都可以直接使用

定义类属性语法:

class  类名(object):

        类属性名 = 值

 调用类属性语法:

类名.类属性名

 例如,一起来完成:

(1)在Student类中,定义一个名为school_name的类属性;

(2)调用使用类属性,观察效果。

class Student:          # 公共属性就定义成类属性
    school_name = '黑马程序员'   #类属性,所有对象共享,不输入任何一个对象,属于整个类,用类名访问,用对象访问可以可以
    # 属性
    def __init__(self, id,name, age,sex):
        self.id = id    # 对象属性,属于某个对象的,使用对象访问
        self.name = name
        self.age = age
        self.sex = sex

    # 学习行为
    def study(self):
        print(f'{self.name}学生要好好学习!')
    # 睡觉行为
    def sleep(self):
        print(f'{self.name}学生要好好睡觉!')


print('-----------------------')
stu = Student(1001,'刘备',18,'M')

# 访问类属性
print('-----------访问类属性-----------------')
print(Student.school_name)  # 使用类名来访问类属性
print(stu.school_name)      # 类属性也可以使用对象访问,但是不建议

# 访问对象属性
print('-----------访问对象属性-----------------')
print(stu.id)   # 使用对象来访问对象属性
print(stu.name) # 使用对象来访问对象属性
print(stu.age)  # 使用对象来访问对象属性
print(stu.sex)  # 使用对象来访问对象属性# 1.定义类 -类属性  [方法]
class People(object):
    # 类属性
    count = 100

    def show(self):
        print("森林防火,人人有责.")

# 2.调用使用
# print(People.count)
# 扩展   了解
# p = People()
# print(p.count)
# 思考: 类属性名可以私有化吗?如何访问?

==总结:==

(1)实际上,可以通过对象名和类名来调用类属性,但优先考虑使用【().类属性名】形式。==A、类名==;B、对象名;

类方法和静态方法

--了解--类方法

==目标==了解类方法的简单使用

类方法指的是:类所拥有的方法。要形成类方法,需满足:

(1)使用装饰器@classmethod来修饰方法;

(2)把方法的第1个参数设置为cls。

定义类方法,语法:

class 类名(object):
    @classmethod
    def 类方法名(cls):
        ...
        
        
# 类方法中不能出现self

 调用类方法,语法:

类名.类方法名()

 说明:类方法一般会和类属性配合使用,尤其是私有类属性。

例如,一起来完成:

(1)定义一个小狗类,且小狗很喜欢吃骨头;[类方法]

# 1、定义类方法
class Dog(object):
    total_dogs = 10 # 类属性,类变量
    @classmethod  # 类方法
    def eat(cls):
        print(f'{cls.total_dogs}条狗吃骨头')  # cls就代表类本身 ,使用类方法来访问类属性


# 调用类方法
Dog.eat()  # 直接使用类名来访问类方法



        
# 静态方法中不能出现self

==总结:==

(1)定义类方法时,需要:先使用()修饰方法,且第1个参数名为cls;==A、@classmethod==;B、@method;

(2)调用类方法的语法:类名.类方法名()。

--了解--静态方法

==目标:==了解静态方法的简单使用。

静态方法需要通过装饰器@staticmethod来修饰方法,且静态方法一般不需要定义任何参数。

定义静态方法,语法:

class 类名(object):
    @staticmethod
    def 静态方法名():
        ...

调用静态方法,语法:

类名.静态方法名()

说明:可以使用静态方法显示一些文本信息。

在Python中,静态方法(static method)是类中的一个方法,但它既不属于类本身(如类方法),也不属于类的实例。静态方法不需要特定的类实例来调用,也不需要类本身作为第一个参数(如类方法中的cls)。它们基本上就是定义在类命名空间中的普通函数,只不过这些函数可以通过类名或类的实例名来调用。

例如,一起来完成:

(1)开发一款要显示操作界面的小游戏,分别有开始、暂停、退出等按键;

(2)使用静态方法完成编写。

# 1.定义类
# 2.静态方法
class Game(object):
    @staticmethod
    def show_menu():
        print("==================================")
        print("\t1.开始游戏;")
        print("\t2.暂停游戏;")
        print("\t3.结束游戏.")
        print("==================================")
​
​
# 静态方法
Game.show_menu()  # 通过类名来调用静态方法
​
game = Game() 
game.show_menu() # 通过实例对象调用静态方法

==总结:==

(1)请问:静态方法要使用@staticmethod修饰,且可以没有参数,这句话正确吗?==A、正确==;B、不正确;

(2)调用静态方法的语法:类名.静态方法名()。

 扩展综合案例

1. 设计一个 Game 类 (类名)
2. 属性:
    • 定义一个 top_score 类属性 -> 记录游戏的历史最高分
    • 定义一个 player_name 实例属性 -> 记录当前游戏的玩家姓名
3. 方法:
    • 静态方法 show_help() -> 直接打印  这是游戏帮助信息
    • 类方法 show_top_score() -> 显示历史最高分
    • 实例方法 start_game() -> 开始当前玩家的游戏
        -   3.1 输出 玩家 xxx 开始游戏
        -   3.2 使用随机数,生成 10 - 100 之间的随机数字作为本次游戏的得分
        -   3.3 打印 玩家 xxx 本次游戏得分 xxx
        -   3.4 判断本次游戏得分和最高分之间的关系
4. 主程序步骤: __main__
    1 查看帮助信息
    2 查看历史最高分
    3 创建游戏对象,开始游戏

import random

class Game(object):
    top_score = 0  # 类属性:记录游戏的历史最高分

    def __init__(self,name):
        self.name = name  #记录当前游戏的玩家姓名

    #这是游戏帮助信息
    @staticmethod
    def show_help():
        print("==================================")
        print("\t1.开始游戏;")
        print("\t2.暂停游戏;")
        print("\t3.结束游戏.")
        print("==================================")

    #显示历史最高分
    @classmethod
    def show_top_score(cls):
        print(f'当前历史最高分{cls.top_score}')  # 类方法访问类属性

    # 开始当前玩家的游戏
    def start_game(self):
        # 3.1 输出 玩家 xxx 开始游戏
        print(f'玩家{self.name} 开始游戏')
        #3.2 使用随机数,生成 10 - 100 之间的随机数字作为本次游戏的得分
        score = random.randint(10, 100)
        #3.3 打印 玩家 xxx 本次游戏得分 xxx
        print(f'玩家 {self.name} 本次游戏得分 {score}')
        #3.4 判断本次游戏得分和最高分之间的关系
        if score > Game.top_score:
            print(f'恭喜{self.name}打破了最高纪录!')
            Game.top_score = score  # 修改最高分
        else:
            print(f'很遗憾,{self.name}没有打破了最高纪录,继续努力!')


if __name__ == '__main__':
    print('-----------------------------------------')
    #1 查看帮助信息
    Game.show_help()

    #2 查看历史最高分
    Game.show_top_score()

    #3 创建游戏对象,开始游戏
    game = Game('刘备')
    game.start_game()

    print('-----------------------------------------')
    #1 查看帮助信息
    Game.show_help()

    #2 查看历史最高分
    Game.show_top_score()

    #3 创建游戏对象,开始游戏
    game = Game('关羽')
    game.start_game()

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

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

相关文章

关系代数与规范化

本文是根据自己的理解,结合实践整理所得,有兴趣的可以参考学习。

掌握Django文件处理:一步步构建上传功能

创建模型 首先先进入我们的testsite项目下,打开members/models.py文件,先添加我们保存文件的数据模型: class Document(models.Model):name models.CharField(max_length255)file models.FileField(upload_touploads/) # uploads/ 是文件…

大模型基架:Transformer如何做优化?

大模型的基础模式是transformer,所以很多芯片都实现先专门的transformer引擎来加速模型训练或者推理。本文将拆解Transformer的算子组成,展开具体的数据流分析,结合不同的芯片架构实现,分析如何做性能优化。 Transformer结构 tr…

CTF本地靶场搭建——GZ:CTF安装

GZ:CTF 项目地址:https://gitcode.com/GZTimeWalker/GZCTF GZCTF 是一款开源的网络安全竞技平台,由开发者GZTimeWalker维护。该项目旨在提供一个环境,让网络安全爱好者和专业人士能够实践他们的技能,通过解决各种安全问题(即“…

流量分析——一、蚁剑流量特征

君衍. 一、Webshell特征流量分析二、环境介绍三、使用Wireshark进行流量分析1、环境说明2、HTTP追踪流分析3、蚁剑请求体中代码块解读 四、使用BurpSurite进行流量分析1、环境配置2、抓包分析 六、总结 一、Webshell特征流量分析 对于重保、护网等攻防演练的防守方来说&#x…

Python03:python代码初体验2

1、变量命名规范 1)字母(Unicode字符)、数字、下划线,不能使用特殊字符,数字不能开头 2)变量名是区分大小写的(大小写敏感,x和X是两个不同的变量名) 3)不能使…

D-Day 上海站回顾丨以科技赋能量化机构业务

5月31日下午,DolphinDB 携手光大证券,在上海成功举办 D-Day 行业交流会。三十余位来自私募机构的核心策略研发、量化交易员、数据分析专家们齐聚现场,深入交流量化投研交易过程中的经验、挑战及解决方案。 DolphinDB 赋能机构业务平台 来自光…

【一百】【算法分析与设计】N皇后问题常规解法+位运算解法

N皇后问题 链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 给出一个nnn\times nnn的国际象棋棋盘,你需要在棋盘中摆放nnn个皇后,使得任意两个皇后之间不能互相攻击。具体来说,不能存在两个皇后位于同…

K8s Pod的QoS类

文章目录 OverviewPod的QoS分类Guaranteed1.如何将 Pod 设置为保证Guaranteed2. Kubernetes 调度器如何管理Guaranteed类的Pod Burstable1. 如何将 Pod 设置为Burstable2.b. Kubernetes 调度程序如何管理 Burstable Pod BestEffort1. 如何将 Pod 设置为 BestEffort2. Kubernete…

Docker 进入指定容器内部(以Mysql为例)

文章目录 一、启动容器二、查看容器是否启动三、进入容器内部 一、启动容器 这个就不多说了 直接docker run… 二、查看容器是否启动 查看正在运行的容器 docker ps查看所有的容器 docker ps -a结果如下图所示: 三、进入容器内部 通过CONTAINER ID进入到容器…

x86国产化麒麟系统上安装docker及问题解决

以前感觉安装docker没有问题,所以没有记录怎么安装的,最近在国产化系统上安装docker总是失败,经过仔细研究完全解决了该问题,特此记录。 参考链接: 在 OpenKylin 上安装 Docker 按照上面的链接可以知道整个docker安装…

足球俱乐部管理系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,教练管理,用户管理,合同信息管理,赛事管理 前台账户功能包括:系统首页,个人中心,公告信息,赛事…

在k8s中部署Kafka高可用集群超详细讲解

🐇明明跟你说过:个人主页 🏅个人专栏:《数据流专家:Kafka探索》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、Kafka简介 2、为什么在Kubernetes中部署Kafka 二、…

Facebook的隐私保护挑战:用户数据安全的新时代

在全球范围内,Facebook已经成为了不可忽视的社交媒体巨头,它连接着超过20亿的活跃用户。然而,随着其影响力的不断扩大,关于用户隐私和数据安全的问题也愈加引人关注。本文将深入探讨Facebook面临的隐私保护挑战,以及它…

列存在 OceanBase 数据库架构中的应用与演进

OceanBase 4.3 版本上线了列存功能,以满足实时分析的需求。 本文作为《特性解读:列存技术》的后续,将详细阐述列存技术在OceanBase数据库架构中的应用、发展历程,以及未来的趋势。 一、前言 1970 年,关系模型之父 Co…

275 基于matlab的脉搏信号处理GUI界面编程

基于matlab的脉搏信号处理GUI界面编程,并实现滤波、去噪、实时回放、小波分析 计算脉率。采用低通滤波器,计算巴特沃斯数字滤波器的阶数N和截止频率Wn、使用coif4小波基计算信号的平稳小波分解完成降噪。程序已调通,可直接运行。 275 脉搏信号…

Ubuntu22.04之安装有道词典(二百三十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

SQL158 每类视频近一个月的转发量/率

描述 用户-视频互动表tb_user_video_log iduidvideo_idstart_timeend_timeif_followif_likeif_retweetcomment_id110120012021-10-01 10:00:002021-10-01 10:00:20011NULL210220012021-10-01 10:00:002021-10-01 10:00:15001NULL310320012021-10-01 11:00:502021-10-01 11:01…

【golang学习之旅】Go中的cron定时任务

系列文章 【golang学习之旅】报错:a declared but not used 【golang学习之旅】Go 的基本数据类型 【golang学习之旅】深入理解字符串string数据类型 【golang学习之旅】go mod tidy 【golang学习之旅】记录一次 panic case : reflect: reflect.Value.SetInt using…

微处理器体系结构

1.冯诺依曼结构 传统计算机采用冯●诺依曼(Von Neumann)结构,也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。 特征: 冯●诺依曼结构的计算机程序和数据共用一个存储空间,程序指令存储地址和数据…