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

对象属性和类属性

--掌握--对象属性

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

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

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

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()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【全开源】安心护送非急救救护车转运平台小程序(FastAdmin+ThinkPHP+Uniap

🚑安心护送非急救救护车转运平台小程序——您的健康守护者💖 安心护送转运平台小程序是一款基于FastAdminThinkPHPUniapp开发的非急救救护车租用转运平台小程序系统,可以根据运营者的业务提供类似短途接送救护服务,重症病人转运服…

几种近距离无线传输的方案

常见的近距离无线通信技术主要有以下几种: 1. 蓝牙(Bluetooth):这是一种近距离、低功耗的无线通讯标准,支持设备短距离通信(10m左右)。常用于无线鼠标、无线键盘或手持移动终端等设备。 2. ZigB…

【权威发布丨投稿优惠】2024年企业管理、投融资与经济学国际会议(EMIFE 2024)

2024年企业管理、投融资与经济学国际会议 2024 International Conference on Enterprise Management, Investment and Financing, and Economics 【1】会议简介 2024年企业管理、投融资与经济学国际会议是一场汇集全球顶尖学者、企业家和经济学家的盛会。本次会议旨在探讨企业管…

【全开源】废品回收垃圾回收小程序APP公众号源码PHP版本

🌟废品回收小程序:绿色生活的新助手🌱 一、引言 随着环保意识的逐渐提高,废品回收成为了我们日常生活中的重要一环。但是,如何更方便、高效地进行废品回收呢?今天,我要向大家推荐一款超级实用的…

线性dp+数论分块,1561D1 - Up the Strip

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1561D1 - Up the Strip (simplified version) 二、解题报告 1、思路分析 一眼dp 写出dp方程: 前者维护前缀和即可O(1)转移 后者呢?——整除分块数论分块问题-CSDN博客 简单叙述下…

成都跃享未来教育:安全可靠,值得信赖的教育新选择

在当今社会,教育行业的竞争日益激烈,家长们对于选择一所安全可靠的教育机构显得尤为谨慎。成都跃享未来教育作为一家新兴的教育机构,以其独特的教育理念和优质的服务赢得了广大家长的信赖和好评。那么,成都跃享未来教育到底安全可…

va_start和va_end使用介绍

一 概述 采用C语言编程的时候,函数中形式参数的数目通常是确定的,在调用时要依次给出与形式参数对应的所有实际参数。但在某些情况下希望函数的参数个数可以根据需要确定。典型的例子有大家熟悉的函数printf()、scanf()和系统调用execl()等。那么它们是怎…

32C3-2模组与乐鑫ESP32­-C3­-WROOM­-02模组原理图、升级口说明

模组原理图: 底板原理图: u1 是AT通信口,wiif-tx wifi-rx 是升级口,chip-pu是reset复位口,GPIO9拉低复位进入下载模式 ESP32-WROOM-32 系列硬件连接管脚分配 功能 ESP32 开发板/模组管脚 其它设备管脚 下载固件…

买卖股票的各种最佳时机问题

买卖股票的最佳时机 分析 根据题意可知,我们只需要找出来一个最小价格的股票和一个最大价格的股票,并且最小价格的股票出现在最大价格的股票之前。 如果尝试使用暴力解法,时间复杂度为O(N^2),对于题目中给的长度,显然…

【Go】编码结构体转换为json字符串

结构体内字段命名大小写问题导致无法解析到 package mainimport ("encoding/json""fmt" ) // 定义一个结构体 type Music struct {name string json:"名称" // 字段大小写命名问题!!!singer string json:&q…

你会用Nginx的第三方模块吗?

你好,我是赵兴晨,97年文科程序员。 你使用过Nginx的第三方模块吗?今天咱们来聊聊Nginx的第三方模块。 在深入了解Nginx的高性能与灵活性的过程中,我们不可避免地会接触到第三方模块。 这些模块是对Nginx原生功能的有力扩展&…

学习笔记——IP地址网络协议——网络掩码(Netmask)

三、网络掩码(Netmask) 1、网络掩码概述 网络掩码(Netmask)又称子网掩码(Subnet Mask)网络掩码为32 bit,与IP地址的位数一样,通常也以点分十进制数来表示。 子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用&#xf…

北斗RTK+UWB定位的优势

在当今科技飞速发展的时代,定位技术的应用已渗透到我们生活的方方面面。从导航、物流到无人驾驶、智能制造,精准定位技术无处不在。而北斗RTK(Real-Time Kinematic,实时动态)和UWB(Ultra-Wideband&#xff…

JS 二进制文件处理与转换:Blob,FileReader,Base64,ArrayBuffer

转载:https://www.cnblogs.com/yinpengfei/p/17280585.html

【CentOS 7】CentOS 7极致指南:高级部署PyCharm 2022.3.3专业版,实现定制化配置与无缝桌面集成

【CentOS 7】CentOS 7极致指南:高级部署PyCharm 2022.3.3专业版,实现定制化配置与无缝桌面集成 大家好 我是寸铁👊 总结了一篇CentOS 7极致指南:高级部署PyCharm 2022.3.3专业版,实现定制化配置与无缝桌面集成✨ 喜欢的…

RN解析富文本内容的插件

安装插件 yarn add react-native-render-html使用 import HTML from react-native-render-html; import {View} from react-native; export default function () {return (<View style{{flex: 1}}><HTMLsource{{html: <p>功能介绍1</p><p>功能介绍…

基于STC89C52单片机空气PM2.5系统设计资料

#include <reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char //宏定义sbit RSP1^6;//液晶接口sbit ENP1^7;sbit LED P2^0;//粉尘传感器控制接口sbit ADCS P3^7;//AD0832接口sbit ADCLK P3^5;sbit ADDI P3^6;sbit ADDO P3^6;…

Cesium项目报错An error occurred while rendering. Rendering has stopped.

一般就是本地打开会报错&#xff0c;改成用本地服务器打开 全局安装一个live-server sudo cnpm i live-server -g然后新增一个package.json文件 npm init -y然后在package.json的scripts中增加一个命令 "server": "live-server ./ --port8181 --hostlocalhos…

一文了解如何安全有效的进行PB级别的大数据迁移

在这个信息量爆炸的时代&#xff0c;处理PB级别的数据转移已成为常态&#xff0c;但对企业而言&#xff0c;这仍然是一个充满挑战的任务。今天&#xff0c;我们来探讨一下这个话题&#xff0c;看看在进行PB级数据转移时&#xff0c;需要留意哪些事项&#xff0c;可能会遇到哪些…

【多模态】35、TinyLLaVA | 3.1B 的 LMM 模型就可以实现 7B LMM 模型的效果

文章目录 一、背景二、方法2.1 模型结构2.2 训练 pipeline 三、模型设置3.1 模型结构3.2 训练数据3.3 训练策略3.4 评测 benchmark 四、效果 论文&#xff1a;TinyLLaVA: A Framework of Small-scale Large Multimodal Models 代码&#xff1a;https://github.com/TinyLLaVA/T…