首页 > 编程语言 >python的函数、魔法方法和案例

python的函数、魔法方法和案例

时间:2024-08-07 23:02:09浏览次数:13  
标签:__ name python self 魔法 案例 print 方法 def

1.python函数中self的用法


在Python中,self 是一个对当前实例(对象)的引用,用于访问属于该类的变量和方法。在定义类的方法时,通常需要将 self 作为第一个参数。这允许在类的实例上调用方法时,自动将实例本身作为参数传递给方法。

class Person:  
    def __init__(self, name, age):  
        self.name = name  # 将name属性绑定到当前实例  
        self.age = age    # 将age属性绑定到当前实例  
  
    def greet(self):  
        print(f"Hello, my name is {self.name} and I am {self.age} years old.")  
  
# 创建一个Person类的实例  
person1 = Person("Alice", 30)  
  
# 调用实例的greet方法  
person1.greet()  # 输出: Hello, my name is Alice and I am 30 years old.

2.魔法方法


2.1 __init__方法


__init__ 方法在Python中是一个特殊的方法,也被称为类的构造函数或初始化方法。这个方法的主要作用是在创建类的新实例时,为实例的属性(变量)设置初始值。每当使用类来创建新对象时,Python都会自动调用这个方法。

__init__方法中,self参数是对新创建对象的引用,通过这个引用,可以访问类中的属性和其他方法。需要注意的是,虽然self在调用方法时是自动传递的,但在定义方法时,它必须作为第一个参数明确写出来。

class Car:  
    def __init__(self, make, model, year):  
        self.make = make  # 设置实例变量make  
        self.model = model  # 设置实例变量model  
        self.year = year  # 设置实例变量year  
  
    def display_info(self):  
        print(f"Make: {self.make}, Model: {self.model}, Year: {self.year}")  
  
# 创建一个Car类的实例  
my_car = Car("Toyota", "Corolla", 2020)  
  
# 调用实例的display_info方法  
my_car.display_info()  # 输出: Make: Toyota, Model: Corolla, Year: 2020

2.2 __str__方法


__str__ 方法是Python中的一个特殊方法(也称为魔法方法),它用于定义对象的字符串表示形式。当尝试将一个对象转换为字符串时(例如,使用 str(obj) 函数或在 print 语句中直接使用对象),Python会尝试调用该对象的 __str__ 方法来获取其字符串表示。

class Student:  
    def __init__(self, name, age):  
        self.name = name  
        self.age = age  
  
    def __str__(self):  
        return f"Student(name={self.name}, age={self.age})"  
  
# 创建一个学生对象  
student = Student("Alice", 20)  
  
# 打印学生对象  
print(student)  # 输出: Student(name=Alice, age=20)

2.3__del__方法


__del__ 方法在Python中是一个特殊方法(也称为析构函数或终结器),它用于定义在对象被销毁(删除)之前要执行的清理操作。当Python的垃圾回收机制检测到一个对象没有任何引用指向它时,它会自动销毁该对象,并在销毁之前调用该对象的 __del__ 方法(如果存在的话)。

class MyClass:  
    def __init__(self, name):  
        self.name = name  
        print(f"Object {self.name} is created")  
  
    def __del__(self):  
        print(f"Object {self.name} is being destroyed")  
  
# 创建对象  
obj = MyClass("Test Object")  
  
# 删除对象(在实际使用中,这一步通常是自动的,由Python的垃圾回收机制完成)  
# del obj  # 注释掉这行代码以观察程序结束时自动销毁对象的情况  
  
# 输出结果(假设没有显式调用del obj)  
# Object Test Object is created  
# ...(程序其他部分的输出)  
# Object Test Object is being destroyed  
# 这行输出是在程序结束时,由Python的垃圾回收机制自动触发的

2.4案例

案例分为两个类,一个家具类,一个房子类,都采用了上述的魔法方法,还有函数的调用,对象的创立和赋值,将一个家具类的对象赋值给一个房子类的对象。代码如下

class HouseItem:
    def __init__(self, name, area):
        self.name = name
        self.area = area

    def __str__(self):
        return f'家具名称{self.name},占地面积{self.area}'


class House:
    def __init__(self, name, area):
        self.name = name
        self.total_area = area
        self.free_area = area
        self.item_list = []

    def __str__(self):
        return f"户型:{self.name},总面积:{self.total_area},
剩余面积:{self.free_area},家具名称列表:{self.item_list}"

    def add_item(self, item):
        if self.free_area > item.area:
            self.item_list.append(item.name)
            self.free_area -= item.area
            print(f"{item.name},添加成功,剩余空间:{self.free_area}")
        else:
            print('添加失败')


# 创建两个家具
bed = HouseItem('大床', 4)
print(bed)
table = HouseItem('新桌子', 2)
print(table)
# 创建一栋房子
house = House('三室一厅', 150)
print(house)
# 把bed塞进house里
house.add_item(bed)
house.add_item(table)
print(house)

输出结果:

3.python的公有与私有属性

在Python中,对象的属性(包括变量和方法)可以是公有的(public)或私有的(private)。这种区分主要通过命名约定来实现,而不是通过语言本身的强制机制。Python并没有像一些其他语言(如Java或C++)那样有严格的访问控制关键字(如publicprivateprotected)。

私有属性的标志:“__属性名”

# 公有
class MyClass:  
    def __init__(self, value):  
        self.public_attribute = value  
  
# 使用  
obj = MyClass(10)  
print(obj.public_attribute)  # 可以访问



# 私有
class MyClass:  
    def __init__(self, value):  
        self.__private_attribute = value  
  
# 错误的访问方式  
obj = MyClass(20)  
print(obj.__private_attribute)  # AttributeError: 'MyClass' object has no attribute '__private_attribute'  
  
# 正确的(但通常不推荐)访问方式  
print(obj._MyClass__private_attribute)  # 20

4.pyton的实例方法、静态方法和类方法

在Python中,类可以定义三种类型的方法:实例方法(Instance Methods)、静态方法(Static Methods)和类方法(Class Methods)。每种方法都有其特定的用途和调用方式。

# 实例方法
class MyClass:  
    def __init__(self, value):  
        self.value = value  
  
    def instance_method(self):  
        print(f"Value: {self.value}")  
# 创建实例  
my_instance = MyClass(10)  
# 调用实例方法  
my_instance.instance_method()  # 输出: Value: 10




# 静态方法
class MyClass:  
    @staticmethod  
    def static_method(arg1, arg2):  
        print(f"Arguments: {arg1}, {arg2}")  
  
# 无需通过实例,直接通过类调用  
MyClass.static_method(1, 2)  # 输出: Arguments: 1, 2





# 类方法
class MyClass:  
    counter = 0  
  
    @classmethod  
    def class_method(cls):  
        cls.counter += 1  
        print(f"Counter: {cls.counter}")  
  
# 通过类调用  
MyClass.class_method()  # 输出: Counter: 1  
MyClass.class_method()  # 输出: Counter: 2  
  
# 注意,通过实例调用也是有效的,但通常我们直接通过类调用类方法  
my_instance = MyClass()  
my_instance.class_method()  # 输出: Counter: 3

5.python文件

python文件的打开方式有两种

1.open(....)

2.with open(....)

5.1使用open的方式操作文件

# 写操作
f=open('a.txt','w',encoding='utf-8')
f.write('hello')
f.write(' world')
f.close()
# 读操作
f=open('a.txt','r',encoding='utf-8')
buf=f.read()
print(buf)
f.close()

5.2使用with open的方式操作文件

# 使用with open方法会自动关闭,不需要再用close
# a表示新增
with open('a.txt','a',encoding='utf-8')as f:
    f.write('\ngood')
# 按行读取文件readline()
# 可以用while和for循环来逐行读取
with open('a.txt',encoding='utf-8')as f:
    buf =f.readline()
    print(buf)
    print(f.readline())

5.3使用python打开json文件

import json
with open('info.json',encoding='utf-8')as f:
    result=json.load(f)
    print(type(result))
    print(result.get('name'))
    print(result.get('age'))
    print(result.get('address').get('city'))
    pass

JSON文件内容为:

{
  "name":"xiaoming",
  "age": 20,
  "like": [
    "king",
    "eat",
    "drink",
    "sleep"
  ],
  "address": {
    "country": "China",
    "city": "changsha"
  }
}

输出结果为:

标签:__,name,python,self,魔法,案例,print,方法,def
From: https://blog.csdn.net/bianyijiqi/article/details/141000507

相关文章

  • 【视频讲解】Python灰色关联度分析直播带货效用、神经退行性疾病数据
    原文链接:https://tecdat.cn/?p=37273原文出处:拓端数据部落公众号 分析师:JiayiDeng 本文展示如何用灰色关联度分析的直播带货效用及作用机制研究,并结合一个分析神经退行性疾病数据实例的代码数据,为读者提供一套完整的实践数据分析流程。一、研究难点直播带货作为新兴产业,缺......
  • 线性方程组迭代算法的Python实现
    更多精彩,关注博客园主页,不断学习!不断进步!我的主页csdn很少看私信,有事请b站私信博客园主页-发文字笔记-常用有限元鹰的主页内容:ABAQUS数值模拟相关Python科学计算开源框架,编程学习笔记哔哩哔哩主页-发视频-常用FE-有限元鹰的个人空间内容:模拟案例网格划分游戏视频,......
  • Spring Boot 3 + MinIO集群 + Nginx 负载均衡 实现图片(头像)的上传 + 更新替换 + 下载
    1.容器准备1.1容器结构 1.2启动容器1.3docker-compose.ymlversion:'3.8'#指定DockerCompose文件的版本,这里使用版本3.8services:minio1:image:minio/minio:latest#使用最新的MinIO镜像来创建MinIO服务的容器volumes:-./data1......
  • 最小二乘法原理推导+代码实现[Python]
    0.前言本文主要介绍了最小二乘法公式推导,并且使用Python语言实现线性拟合。读者需要具备高等数学、线性代数、Python编程知识。请读者按照文章顺序阅读。绘图软件为:geogebra5。1.原理推导1.1应用最小二乘法在购房中的应用通常涉及房价预测和房屋定价方面。这种统计方法通......
  • 【Java】NIO-从入门到精通-Netty先修课-全网最全-综合案例分析
    XiaoYongCai2024/8/6一:AboutByteBuffer1.ByteBuffer用法在JavaNIO中,Buffer是一个用于存储特定基本类型数据的容器,ByteBuffer是最常用的Buffer类型,用于存储字节序列。以下是ByteBuffer的读写操作分析:A.Buffer的基本属性capacity:缓冲区的容量,即可以存储的最大数......
  • python opencv图片简单操作
    一、从文件读取图片cv2.imread(filename,flags) 参数: filepath:读入image的完整路径 flags:标志位,{cv2.IMREAD_COLOR,cv2.IMREAD_GRAYSCALE,cv2.IMREAD_UNCHANGED} cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道,可用1作为实参替代 cv2.IMREAD_GRAYSCALE:读入......
  • Python 中的排序与 ASCII 编码解析
    1.引言    不知道你有没有想过用Python进行一些排序的工作,对于一些数量比较小的数字集合(例如:1、15、32、79、6、55)我们可以迅速发现最大的79和最小的1,但当这个数量非常大的时候,我们找大小就很费劲了,而这种繁琐的工作就应该派计算机出马了2.比大小  a.常规数字比......
  • 星星闪烁案例
    prototype(原型对象)所有的JavaScript对象都会从一个prototype(原型对象)中继承属性和方法。Math.floor() 函数总是返回小于等于一个给定数字的最大整数Math.random() 静态方法返回一个大于等于0且小于1的伪随机浮点数,并在该范围内近似均匀分布,然后你可以缩放到所需的......
  • Python使用Memcached示例
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;推荐专栏《10天学会使用asp.net编程AI大模型》,目前已完成所有内容。一顿烧烤不到的费用,让人能紧跟时代的浪潮。从普通网站,到公众号、小程序,再到AI大模型网站。干货满满。学成后可......
  • 2024年华为OD机试真题-欢乐的周末-Python-OD统一考试(C卷D卷)
    2024年OD统一考试(D卷)完整题库:华为OD机试2024年最新题库(Python、JAVA、C++合集) 题目描述:小华和小为是很要好的朋友,他们约定周末一起吃饭。通过手机交流,他们在地图上选择了多个聚餐地点(由于自然地形等原因,部分聚餐地点不可达),求小华和小为都能到达的聚餐地点有多少个?输入描述......