首页 > 其他分享 >看一遍就会用——面向对象:类和对象,实例属性,实例方法,字符串表示

看一遍就会用——面向对象:类和对象,实例属性,实例方法,字符串表示

时间:2024-11-08 21:19:11浏览次数:3  
标签:__ name self 就会用 面向对象 实例 print age

python面向对象

1.类和对象

在Python中,类和对象是面向对象编程(OOP)的核心概念。类(Class)是创建对象的蓝图或模板,它定义了对象将拥有的属性和方法。对象(Object)则是根据类创建的具体实例,它包含了类的属性和方法,并且可以在运行时使用这些属性和方法。

定义类:定义一个类使用class关键字,后面跟着类名和一个冒号。类的主体由缩进的代码块组成,通常包含属性和方法的定义。
创建对象:使用类名并调用它(通常带有参数)来创建对象。
: 是对象的模版(共同的特性),抽象的
对象: 是类的实例化, 看的见,摸的着的具体的对象,万事万物皆为对象

# 1.创建类
class Student:
    pass

# 2.创建对象
zs = Student()
ls = Student()
print(zs == ls)
print(id(zs), id(ls))

# 3.查看类型
print(type(zs))  # <class '__main__.Student'>
print(zs.__class__)  # <class '__main__.Student'>
print(isinstance(zs, Student))  # True

# 4.销毁对象
del zs
print(ls)

2.实例属性

实例属性通常在类的初始化方法__init__中定义。这个方法是一个特殊的方法,当创建类的新实例时,Python会自动调用它。

class Person:
    def __init__(self, first_name, last_name, age):
        self.first_name = first_name  # 实例属性
        self.last_name = last_name    # 实例属性
        self.age = age                # 实例属性

    def greet(self):
        print(f"Hello, my name is {self.first_name} {self.last_name}.")

# 创建Person类的实例
p1 = Person("John", "Doe", 30)
p2 = Person("Jane", "Smith", 25)

# 访问实例属性
print(p1.first_name)  # 输出: John
print(p2.age)         # 输出: 25

# 修改实例属性
p1.age = 31
print(p1.age)         # 输出: 31

# 调用方法
p1.greet()           # 输出: Hello, my name is John Doe.

实例属性的特性:

  • 独立性:每个对象实例都有自己的实例属性副本,修改一个对象的属性不会影响其他对象。
  • 动态性:可以在对象创建后随时添加或修改实例属性。
  • 封装:实例属性通常被封装在类的内部,通过类的方法访问和修改,以维护数据的完整性和安全性。

3.实例方法

实例方法是在类体内部定义的,除了self之外,它们还可以接受其他参数。self参数在调用方法时不需要显式传递,Python会自动将调用方法的对象实例作为self参数传入。

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

    def speak(self):
        raise NotImplementedError("Subclass must implement abstract method")

class Dog(Animal):
    def __init__(self, name, age):
        super().__init__(name)  # 调用父类的初始化方法
        self.age = age

    def speak(self):
        return f"{self.name} says Woof!"

class Cat(Animal):
    def speak(self):
        return f"{self.name} says Meow!"

# 创建对象实例
dog = Dog("Rex", 3)
cat = Cat("Whiskers")

# 调用实例方法
print(dog.speak())  # 输出: Rex says Woof!
print(cat.speak())  # 输出: Whiskers says Meow!

实例方法的特性:

  • 访问实例属性:实例方法可以访问和修改对象的实例属性。
  • 绑定到对象:实例方法与特定的对象实例绑定,每个对象都可以有自己的方法实现(尽管它们通常是通过类定义的共享方法)。
  • 可覆盖性:在子类中,可以覆盖父类的实例方法以提供不同的实现。

4.字符串表示

1.__str__方法

__str__方法定义了一个对象的“非正式”或可打印的字符串表示。当你想要给用户一个友好的、易读的表示时,应该实现这个方法。print()函数和其他期望字符串表示的内置函数(如format())通常会调用__str__方法。

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

    def __str__(self):
        return f"Dog(name={self.name}, age={self.age})"

d = Dog("Buddy", 5)
print(d)  # 输出: Dog(name=Buddy, age=5)

2.__repr__方法

_ repr_ 方法定义了一个对象的“正式”字符串表示,旨在是准确的、无歧义的,并且尽可能表达对象是如何被创建的。这通常用于调试和开发,因为repr()函数和交互式解释器会调用它。一个好的__repr__方法应该允许开发者通过eval(repr(obj))重新创建出该对象(尽管这并不总是可能的或必要的)。

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

    def __repr__(self):
        return f"Dog(name='{self.name}', age={self.age})"

d = Dog("Buddy", 5)
print(repr(d))  # 输出: Dog(name='Buddy', age=5)
# 在交互式解释器中,直接输入对象名也会调用 __repr__
# d  # 输出: Dog(name='Buddy', age=5)

注意事项

  • _ str _ 和 _ repr_ 都应该返回字符串。
  • 如果你的类表示的是某种可以被直接解释的数据结构(如列表、字典或自定义的数据结构),那么__repr__的输出应该尽可能能够重新创建出该对象。
  • 对于简单的类,_str _ 和 __repr __ 可以返回相同的值,但对于更复杂的类,你可能希望为它们提供不同的输出。
  • 在实现这些方法时,避免产生无限递归或抛出异常,因为这可能会导致调试变得困难。

标签:__,name,self,就会用,面向对象,实例,print,age
From: https://blog.csdn.net/wd18836095078/article/details/143634861

相关文章

  • Hadoop及Spark环境配置与运行实例
    一、参考资料重要说明本文章为大数据分析课程实验之Hadoop与Spark平台配置记录及示例演示,其中Hadoop配置部分绝大多数内容源自参考资料:华为云:Hadoop安装教程(单机/伪分布式配置)、CSDN:Hadoop安装教程(单机/伪分布式配置)(两文章内容相同且均为同一作者:@华东设计之美);Spark配置部分......
  • C++ 模板显式实例化
    //template.hpptemplate<typenameT>classDylan{public:Dylan(Tt);Tm_data;};//template.cpp#include"template.hpp"template<typenameT>Dylan<T>::Dylan(Tt){m_data=t;}templateclassDylan<int&g......
  • 【YOLOv11[基础]】实例分割Seg | 导出ONNX模型 | ONN模型推理以及检测结果可视化 | py
    本文将导出YOLO-Seg.pt模型对应的ONNX模型,并且使用ONNX模型推理以及结果的可视化。话不多说,先看看效果图吧!!!目录一导出ONNX模型二推理及检测结果可视化1代码2效果图......
  • 三十三、Python基础语法(面向对象其他语法-下)
    一、属性划分1.类属性类属性:类属性就是类对象具有的属性,一般写法在类内部、方法的外部定义的变量,就是类属性,类属性在内存中只有一份。可以通过类名直接访问,也可通过实例访问。classCircle:#类属性,定义圆周率pi=3.14159def__init__(self,radius):......
  • 使用C++和QT开发应用程序入门以及开发实例分享
    目录1、搭建开发环境(VS2010和QT4.8.2)2、创建一个QT窗口3、在QT窗口中添加子窗口4、QT界面布局5、QT信号(SIGNAL)和槽(SLOT)6、最后C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/125529931C/C++实......
  • 前后端大文件上传,断点续传、分片上传、秒传的完整实例
    需求:大文件上传,批量上传,断点续传,文件夹上传,大文件下载,批量下载,断点下载,文件夹下载文件夹:上传下载需要支持层级结构,采用非压缩方式文件大小:100G前端:vue2,vue3,vue-cli,jquery,html,webuploader后端:JSP,springbootweb服务:tomcat数据库:mysql,oracle,达梦,国产化数据库服务......
  • win11中使用docker-nacos连接容器中的mysql实例记录
     二.方式11.拉取nacosdockerpullnacos/nacos-server2.在dockerdesktop中进行配置如下图相比较’方式2‘这种方式更简单,mysqlip地址需要使用ipv4地址,具体的自己查看ipconfig的ipv4地址(注意:localhsot/127.0.0.1/容器名称都是不行的)下面这几个参数在application.proper......
  • Centos7.8静默安装企业版Oracle11g和创建实例
    1、安装环境准备:A、系统版本和oracle11g企业版安装软件压缩包:[root@dbprimary07~]#cat/etc/redhat-releaseCentOSLinuxrelease7.8.2003(Core)[root@dbprimary07~]#uname-aLinuxdbprimary073.10.0-1127.el7.x86_64#1SMPTueMar3123:36:51UTC2020x86_64x......
  • PHP反射API与面向对象编程:当“魔镜”遇上“家族聚会”
    在PHP的世界里,面向对象编程(OOP)就像是一场盛大的家族聚会,每个类都是家族中的一员,它们有着自己的属性和方法。而PHP的反射API,就像是一面神奇的“魔镜”,能够让我们窥探这些家族成员的内心深处,了解它们的秘密。今天,我们就来聊聊这两者之间的关系,以及如何通过代码示例来展示它们的互......
  • python面向对象(一)
    前言Python是一种功能强大的编程语言,因其简洁的语法和强大的库而备受开发者喜爱。而在Python中,面向对象编程(OOP)是一种核心的编程范式,它通过模拟现实世界中的对象和交互来帮助我们设计清晰、易维护的代码。在本篇博客中,我们将深入探讨Python的面向对象编程的基本概念,了解如......