python核心-面向对象-方法相关-补充

news2024/11/25 15:39:23

class Person:
    __age = 18

    def __run(self):
        print("pao")

    def _Person__run(self):
        print("xxx")

p = Person
# p._Person__run()

print(Person.__dict__)

 内置特殊方法

信息格式化操作

 

# class Person:
#     def __init__(self, n, a):
#         self.name = n
#         self.age = a
#
#     def __str__(self):
#         return "姓名:%s,年龄:%s" % (self.name, self.age)
#
# p1 = Person("sz", 18)
# # print(p1.name)
# # print(p1.age)
# print(p1)
#
# p2 = Person("zhangsan", 19)
# # print(p2.name)
# # print(p2.age)
# print(p2)
#
# s = str(p1)
# print(s, type(s))
# class Person:
#     def __init__(self, n, a):
#         self.name = n
#         self.age = a
#
#     def __str__(self):
#         return "姓名:%s,年龄:%s" % (self.name, self.age)
#
#     def __repr__(self):
#         return "reprxxxxxx"
#
# p1 = Person("sz", 18)
# # print(p1.name)
# # print(p1.age)
# print(p1)
#
# p2 = Person("zhangsan", 19)
# # print(p2.name)
# # print(p2.age)
# print(p2)
#
# # s = str(p1)
# # print(s, type(s))
#
# print(repr(p1))
import datetime
t = datetime.datetime.now()
print(t)
print(repr(t))

tmp = repr(t)

result =eval(tmp)
print(result)

调用操作 

 

# class Person:
#     def __call__(self, *args, **kwargs):
#         print("xxxx", args, kwargs)
#     pass
#
# p = Person()
#
# p(123,456, name = "sz")


# 创建很多个画笔,画笔的类型(钢笔,铅笔),画笔的类型(红橙黄绿青蓝紫)
#
# print("创建了一个%s这个类型的画笔,他是%s颜色的画笔" % ("钢笔", "红色"))
# print("创建了一个%s这个类型的画笔,他是%s颜色的画笔" % ("钢笔", "红色"))
# print("创建了一个%s这个类型的画笔,他是%s颜色的画笔" % ("钢笔", "红色"))
# print("创建了一个%s这个类型的画笔,他是%s颜色的画笔" % ("钢笔", "红色"))


# def creatPen(p_color,p_type):
#     print("创建了一个%s这个类型的画笔,他是%s颜色的画笔" % (p_type,p_color))
# # creatPen("", "")
# # creatPen("", "")
# # creatPen("", "")
#
# import functools
# gangbiFunc = functools.partial(creatPen,p_type = "钢笔")
#
# gangbiFunc("红色")
# gangbiFunc("黄色")
# gangbiFunc("蓝色")

class PenFactory:

    def __init__(self, p_type):
        self.p_type = p_type

    def __call__(self, p_color):
        print("创建了一个%s这个类型的画笔,他是%s" % (self.p_type, p_color))


gangbiF = PenFactory("钢笔")
gangbiF("红色")
gangbiF("蓝色")
gangbiF("绿色")

索引操作 

 

class Person:
    def __init__(self):
        self.cache = {}
    def __setitem__(self, key, value):
        # print("setitem", key, value)
        self.cache[key] = value
    def __getitem__(self, item):
        # print("getitem",item)
        return self.cache[item]
    def __delitem__(self, key):
        # print("delitem",key)
        del self.cache[key]
p = Person()
p["name"] = "sz"

print(p["name"])

# del p["name"]

print(p["name"])

切片操作

 

# ---------------------------切片操作--------------------------------
# l = [1, 2, 3, 4, 5]
# print(l[3])
# print(l[1: 4: 2])


class Person:
    def __init__(self):
        self.items = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    def __setitem__(self, key, value):
        # print(key, value)
        # print(key.start)
        # print(key.stop)
        # print(key.step)
        # print(value)
        if isinstance(key, slice)
        self.items[key] = value
        # self.items[key.start:key.stop:key.step] = value

    def __getitem__(self, item):
        print("getitem", item)

    def __delitem__(self, key):
        print("delitem", key)

p = Person()
p[0: 4: 2] = ['a', 'b']

print(p.items)

# p[0: 5: 2]
# del p[0: 5: 2]

比较操作

# ------------------比较操作---------------------------------

class Person:
    # ==  !=  >  >=  <  <=
    def __init__(self, age, height):
        self.age = age
        self.height = height

    def __eq__(self, other):
        print(other)
        return self.age == other.age

    def __ne__(self, other):
        print("xxx")
    def __gt__(self, other):
        pass
    def __ge__(self, other):
        pass
    def __lt__(self, other):
        print("lt")
        pass
    def __le__(self, other):
        pass

p1 = Person(18, 180)
p2 = Person(18, 190)

print(p1 == p2)
print(p1 != p2)
print(p1<p2)

 注意事项 

class Person:
    # ==  !=  >  >=  <  <=
    def __init__(self, age, height):
        self.age = age
        self.height = height


    def __lt__(self, other):
        # print("lt")
        print(self.age)
        print(other.age)
        return self.age < other.age

p1 = Person(18, 180)
p2 = Person(19, 190)

print(p1 < p2)
print(p1 > p2)

不支持叠加操作 

class Person:
    def __lt__(self, other):
        pass
    def __eq__(self, other):
        pass

p1 = Person()
p2 = Person()
p1 <= p2  # 错的

装饰器反向组合 

import functools
@functools.total_ordering
class Person:
    def __lt__(self, other):
        print("lt")
        return False
        pass
    def __eq__(self, other):
        print("eq")
        pass

p1 = Person()
p2 = Person()
print(p1 <= p2)

print(Person.__dict__)

上下文环境的bool值


class Person:
    def __init__(self):
        self.age = 20
    def __bool__(self):
        return self.age >= 18
    pass

p = Person()

if p:
    print("xxx")

遍历操作

 

# -----------------------------遍历操作-----------------------------

# class Person:
#     def __init__(self):
#         self.result = 1
#
#     def __getitem__(self, item):
#         self.result += 1
#         if self.result >= 6 :
#             raise StopIteration("停止遍历")
#         return self.result
#     pass
#
# p = Person()
#
# for i in p:
#     print(i)


# 方式2
class Person:
    def __init__(self):
        self.result = 1

    # def __getitem__(self, item):
    #     print("getitem")
    #     self.result += 1
    #     if self.result >= 6 :
    #         raise StopIteration("停止遍历")
    #     return self.result

    def __iter__(self):
        print("iter")
        # return iter([1, 2, 3, 4, 5])
        return self
    def __next__(self):
        #     print("getitem")
        self.result += 1
        if self.result >= 6 :
            raise StopIteration("停止遍历")
        return self.result


    pass

p = Person()

# for i in p:
#     print(i)

print(next(p))
print(next(p))
print(next(p))
print(next(p))

# l = [1, 2, 3]
# iter(l)
# ---------------------------回复迭代器初始值------------------------------

class Person:
    def __init__(self):
        self.age = 1

    def __iter__(self):
        self.age = 1
        return self

    def __next__(self):
        self.age += 1
        if self.age >= 6:
            raise StopIteration("stop")

        return self.age

p = Person()

for i in p:
    print(i)

for i in p:
    print(i)

# import collections
# print(isinstance(p, collections.Iterator))
# --------------------------------iter函数的使用---------------------------------


class Person:
    def __init__(self):
        self.age = 1

    # def __getitem__(self, item):
    #     print("getitem")
    #     self.age += 1
    #     if self.age >= 6 :
    #         raise StopIteration("停止遍历")
    #     return self.age

    def __iter__(self):
        self.age = 1
        return self

    # def __next__(self):
    #     self.age += 1
    #     if self.age >= 6:
    #         raise StopIteration("stop")
    #     return self.age

    def __call__(self, *args, **kwargs):
        self.age += 1
        if self.age >= 6:
            raise StopIteration("stop")
        return self.age

p = Person()
# pt = iter(p)
# pt = iter(p.__next__, 4)
pt = iter(p, 4)

print(pt)

# print(pt is p)
for i in pt:
    print(i)

# l = [1, 2, 3]
# lt = iter(l)
# print(lt)

描述器 

# ---------------------- 描述器 - 定义方法1---------------------------------
class Person:
    def __init__(self):
        self.__age = 10

    def get_age(self):
        return self.__age

    def set_age(self, value):
        if value < 0:
            value = 0
        self.__age = value

    def del_age(self):
        del self.__age

    age = property(get_age, set_age, del_age)


# p = Person()
# p.age = 19
# print(p.age)
# del p.age
# print(p.age)


# p.set_age(-10)
# print(p.get_age())
# p.del_age()

# help(Person)


# class Person:
#     def __init__(self):
#         self.__age = 10
#     @property
#     def age(self):
#         return self.__age
#     @age.setter
#     def age(self, value):
#         if value < 0:
#             value = 0
#         self.__age = value
#     @age.deleter
#     def age(self):
#         print("del age")
#         del self.__age
#
# p = Person()
# print(p.age)
# ------------------------描述器-定义方式2-----------------------------------

class Age:
    def __get__(self, instance, owner):
        print("get")

    def __set__(self, instance, value):
        print("set")

    def __delete__(self, instance):
        print("delete")


class Person:
    age = Age()
    # def __init__(self):
    #     self.__age = 10
    # # @property
    # def age(self):
    #     return self.__age
    # # @age.setter
    # def age(self, value):
    #     if value < 0:
    #         value = 0
    #     self.__age = value
    # # @age.deleter
    # def age(self):
    #     print("del age")
    #     del self.__age

p = Person()
p.age = 10
print(p.age)
del p.age

 

 

# -----------------------描述器-调用细节-----------------------------

class Age:
    def __get__(self, instance, owner):
        print("get")

    def __set__(self, instance, value):
        print("set")

    def __delete__(self, instance):
        print("delete")

class Person:
    age = Age()

# 通过实例操作这个描述器,而不是通过这个类
p = Person()
p.age = 10
print(p.age)
del p.age

# print(Person.age)
# Person.age = 19
# del Person.age

# -------------------------描述器-和实例属性同名时,操作优先级------------------------
# 资料描述器 get set
# 非资料描述器    仅仅实现了   get 方法,那么他就是非资料描述器
# 资料描述器 > 实例属性 > 非资料描述器
class Age:
    def __get__(self, instance, owner):
        print("get")

    # def __set__(self, instance, value):
    #     print("set")
    #
    # def __delete__(self, instance):
    #     print("delete")

class Person:
    age = Age()
    def __init__(self):
        self.age = 10


p = Person()
p.age = 10
print(p.age)
# del p.age

print(p.__dict__)

 

# -------------------------描述器 - 值的存储问题
# class Person:
#     def __init__(self):
#         self.__age = 10
#
#     def get_age(self):
#         return self.__age
#
#     def set_age(self, value):
#         if value < 0:
#             value = 0
#         self.__age = value
#
#     def del_age(self):
#         del self.__age
#
#     age = property(get_age, set_age, del_age)
#
#
# p = Person()
# p.age = 19
# print(p.age)
# del p.age

class Age:
    def __get__(self, instance, owner):
        print("get")
        return instance.v

    def __set__(self, instance, value):
        print("set", self, instance, value)
        instance.v = value

    def __delete__(self, instance):
        print("delete")
        del instance.v

class Person:
    age = Age()

# 通过实例操作这个描述器,而不是通过这个类
p = Person()
p.age = 10
print(p.age)
# del p.age

p2 = Person()
p2.age = 11
print(p2.age)
print(p.age)

 

# ------------------------使用类,实现装饰器----------------------------------

# def check(func):
#     def inner():
#         print("登陆验证")
#         func()
#     return inner

class check:
    def __init__(self,func):
        self.f =func

    def __call__(self, *args, **kwargs):
        print("登陆验证")
        self.f()

@check
def fashuoshuo():
    print("发说说")
# fashuoshuo = check(fashuoshuo)

fashuoshuo()

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

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

相关文章

深入理解Linux 内核追踪机制

Linux 存在众多 tracing tools&#xff0c;比如 ftrace、perf&#xff0c;他们可用于内核的调试、提高内核的可观测性。众多的工具也意味着繁杂的概念&#xff0c;诸如 tracepoint、trace events、kprobe、eBPF 等&#xff0c;甚至让人搞不清楚他们到底是干什么的。本文尝试理清…

硬件——PCI-E接口

简介 PCI PCI&#xff08;Peripheral Component Interconnect&#xff09;&#xff0c;外设组件互联标准。 并行方式通信 PCI接口通常是白色的。 PCI接口分为32Bit和64Bit&#xff0c;主流的是32Bit&#xff0c;最大传输速度133MB/s。 适用于网卡、声卡等&#xff1b;现在…

flask中的session介绍

flask中的session介绍 在Flask中&#xff0c;session是一个用于存储特定用户会话数据的字典对象。它在不同请求之间保存数据。它通过在客户端设置一个签名的cookie&#xff0c;将所有的会话数据存储在客户端。以下是如何在Flask应用中使用session的基本步骤&#xff1a; 首先…

Midjourney8种风格极其使用场景(1)

目录 ​编辑 引言 等距动画 场景 分析性绘图 场景 着色书 场景 信息图画 场景 双重曝光 场景 图示性绘画 场景 二维插图 场景 图解式画像 场景 总结&#xff1a; 八种风格箴言&#xff1a; 引言 我相信大家都或多或少玩过Midjourney&#xff0c;但是要形…

Excel“牛人”变现方案参考

有几种方式可以通过Excel技能实现变现&#xff1a; 1. 提供Excel咨询和培训服务&#xff1a;如果你对Excel非常熟悉&#xff0c;你可以提供咨询和培训服务&#xff0c;帮助他人解决Excel使用中的问题或提高他们的Excel技能。 2. 制作和销售Excel模板&#xff1a;你可以根据市…

同步和异步——简单的Demo

一、程序中的同步和异步的区别 在编程中&#xff0c;同步和异步是指代码执行的方式和顺序。 1. 同步&#xff08;Synchronous&#xff09;&#xff1a; 同步代码按照顺序依次执行&#xff0c;每个操作必须等待前一个操作完成后才能执行。在同步模式下&#xff0c;代码会阻塞&…

部署问题集合(十八)Windows环境下使用两个Tomcat

下载Tomcat Tomcat镜像下载地址&#xff1a;https://mirrors.cnnic.cn/apache/tomcat/进入如下地址&#xff1a;zip的是压缩版&#xff0c;exe是安装版 修改第二个Tomcat配置文件 第一步&#xff1a;编辑conf/server.xml文件&#xff0c;修改三个端口&#xff0c;有些版本改…

信号量SytemV与Posix信号量的介绍与用法

目录 1、信号量介绍 2、信号量SystemV介绍 2.1 信号量函数 2.2 信号量C代码实现 3、信号量Posix介绍 3.1 无名信号量 3.2 有名信号量 1、信号量介绍 信号量是一种计数器&#xff0c;用在多进程、多线程的共享资源访问控制上面&#xff0c;防止多进程、多线程对共享资源的…

win下tomcat部署问题积累

1、win下双击tomcat的start.bat出现闪退 检查环境变量是否配置正确&#xff1a; 1.在已解压的tomcat的bin文件夹下找到startup.bat&#xff0c;右击->编辑。在文件头加入下面两行&#xff1a; SET JAVA_HOMED:\Java\jdk1.6.0_10 &#xff08;java jdk目录&#xff09;S…

【C语言进阶】程序环境和预处理

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;C语言 &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、程序的翻译环境和执行环境 二、详解编译和链接 2.1翻译环境 2.2编译的过…

Centos yum install出现Error: Unable to find a match: epel-release的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

MySQL基础扎实——MySQL中有哪几种锁

常见锁举例 在MySQL中&#xff0c;常见的锁包括以下几种&#xff1a; 表级锁&#xff08;Table-level Lock&#xff09;&#xff1a;表级锁是对整张表进行锁定&#xff0c;可以分为两种类型&#xff1a; 共享锁&#xff08;Shared Lock&#xff09;&#xff1a;也称为读锁&…

Google Earth Engine谷歌地球引擎提取多波段长期反射率数据后绘制折线图并导出为Excel

本文介绍在谷歌地球引擎GEE中&#xff0c;提取多年遥感影像多个不同波段的反射率数据&#xff0c;在GEE内绘制各波段的长时间序列走势曲线图&#xff0c;并将各波段的反射率数据与其对应的成像日期一起导出为.csv文件的方法。 本文是谷歌地球引擎&#xff08;Google Earth Engi…

Python图像处理【13】使用PIL执行图像降噪

使用PIL执行图像降噪 0. 前言1. 均值滤波器1.1 均值滤波器原理1.2 使用均值滤波器去除椒盐噪声 2. 高斯滤波器2.1 高斯滤波器原理2.2 使用高斯模糊滤波器去除椒盐噪声 3. 中值滤波器3.1 中值滤波器原理3.2 使用中值滤波器去除椒盐噪声 小结系列链接 0. 前言 在本节中&#xff…

MAXENT模型的生物多样性教程

详情点击链接&#xff1a;基于MAXENT模型的生物多样性生境模拟与保护优先区甄选、自然保护区布局优化及未来气候变化下评估中的应用及论文写作 一&#xff1a;生物多样性保护格局与自然保护区格局优化 1.我国生物多样性格局与分布&#xff1b; 2.我国自然保护区格局与分布&…

Emacs之改造搜索文件fd-dired(基于fd命令)(一百二十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

【【51单片机AD转换模块】】

代码是简单的&#xff0c;板子是坏的&#xff0c;电阻是识别不出来的 main.c #include <REGX52.H> #include "delay.h" #include "LCD1602.h" #include "XPT2046.h"unsigned int ADValue;void main(void) {LCD_Init();LCD_ShowString(1,1…

format格式化输出语法详解

hello&#xff0c;这里是Token_w的文章&#xff0c;主要讲解python的基础学习&#xff0c;希望对大家有所帮助 整理不易&#xff0c;感觉还不错的可以点赞收藏评论支持&#xff0c;感谢&#xff01; 使用 % 操作符对各种类型的数据进行格式化输出&#xff0c;这是早期 Python提…

文档、视频、图片上传(点击、拖拽、批量导入)要‍‍‍‍怎么实现?!

文章目录 Excel上传和图片视频上传Excel上传页面中的使用图片和视频上传的错误提醒以及逻辑处理上传进度处理 Excel上传和图片视频上传 Excel上传 excel的上传其实分为两步&#xff1a; 1、下载excel模板 2、上传excel模板 在项目中涉及到excel的业务&#xff0c;基本上都…