当前位置: 首页 > news >正文

三十三、Python基础语法(面向对象其他语法-下)

一、属性划分

1.类属性

类属性:类属性就是类对象具有的属性,一般写法在类内部、方法的外部定义的变量,就是类属性,类属性在内存中只有一份。可以通过类名直接访问,也可通过实例访问。

class Circle:# 类属性,定义圆周率pi = 3.14159def __init__(self, radius):self.radius = radiusdef calculate_area(self):# 使用类属性计算圆的面积return Circle.pi * self.radius * self.radiusdef calculate_circumference(self):# 使用类属性计算圆的周长return 2 * Circle.pi * self.radius# 创建两个圆对象
circle1 = Circle(5)
circle2 = Circle(8)print(f"圆 1 的面积:{circle1.calculate_area()}")
print(f"圆 2 的面积:{circle2.calculate_area()}")print(f"圆 1 的周长:{circle1.calculate_circumference()}")
print(f"圆 2 的周长:{circle2.calculate_circumference()}")

2.实例属性

实例属性:实例属性就是对象具有的属性,在类中 的 init 方法中, 使用 self 定义的属性,每个实例对象中都存在一份自己的属性信息。

class Person:def __init__(self, name, age):self.name = name  # 实例属性 nameself.age = age    # 实例属性 agedef introduce(self):return f"我是{self.name},今年{self.age}岁。"# 创建两个 Person 类的实例
person1 = Person("小明", 20)
person2 = Person("小红", 22)print(person1.introduce())
print(person2.introduce())

如何判断一个属性是定义实例属性还是类属性?

基本上所有的属性都实例属性,实例属性描述每个实例对象的特有信息,类属性描述的是整个类共有信息。

二、方法的划分

1.实例方法

直接使用def关键字定义的方法就是实例对象方法(实例方法),调用:实例对象.方法名()

class Dog:def __init__(self, name):self.name = namedef bark(self):# 实例方法,打印狗狗的叫声和名字print(f"{self.name}:汪汪!")# 创建一个 Dog 类的实例
my_dog = Dog("小白")# 调用实例方法
my_dog.bark()

2.类方法

类方法:在 def 的上方使用装饰器 @classmethod 装饰的方法,调用:类名.方法名()、对象.方法名()

class Circle:pi = 3.14159def __init__(self, radius):self.radius = radius@classmethoddef from_diameter(cls, diameter):# 类方法,通过直径创建 Circle 实例return cls(diameter / 2)def area(self):return Circle.pi * self.radius * self.radius# 使用类方法创建实例
circle1 = Circle.from_diameter(10)
print(circle1.radius)print(circle1.area())

3.静态方法

静态方法:在 def 的上方,使用装饰器 @staticmethod 装饰的方法,静态方法,它不依赖于类的实例,也不访问类属性或实例属性。它只是一个与类相关的工具方法,可以直接通过类名来调用。

class MathUtils:@staticmethoddef add(a, b):# 静态方法,进行简单的加法运算return a + bresult = MathUtils.add(5, 3)
print(result)  # 输出 8

http://www.mrgr.cn/news/67236.html

相关文章:

  • Day95 Docker
  • 基于Spring Boot 框架的试卷自动生成系统的设计与实现
  • 冒泡排序、选择排序、计数排序、插入排序、快速排序、堆排序、归并排序JAVA实现
  • 力扣11.4
  • 基于NVIDIA NIM平台实现盲人过马路的demo(一)
  • 风宇博客全站HTTPS配置
  • 非关系型数据库NoSQL的类型与优缺点对比
  • 基于 Vue3、Vite 和 TypeScript 实现开发环境下解决跨域问题,实现前后端数据传递
  • 代码随想录第十八天| 530.二叉搜索树的最小绝对差 、 501.二叉搜索树中的众数 、236. 二叉树的最近公共祖先
  • 【FPGA】Verilog:理解德摩根第一定律: ( ̅A + ̅B) = ̅A x ̅B
  • 【真题笔记】21年系统架构设计师要点总结
  • dns服务器配置
  • Java项目实战II基于Spring Boot的问卷调查系统的设计与实现(开发文档+数据库+源码)
  • 源文件到可执行文件流程
  • LeetCode17. 电话号码的字母组合(2024秋季每日一题 59)
  • IDEA构建JavaWeb项目,并通过Tomcat成功运行
  • C语言程序的机器表示(逆向+函数调用栈详解版)
  • 【入门篇】2.10 串口打印Helloworld
  • VisionPro —— 颜色匹配工具详解
  • Linux APT 教程:从入门到精通
  • [C语言]多组输入的几种方法
  • 华为HD集群重启NAMENODE实例操作步骤
  • 交换机和集线器的区别
  • 软件测试面试题个人总结
  • 推荐程序员好用的浏览器插件
  • 【金融风控】相关业务介绍及代码详解