专栏首页有趣的django10.python3实用编程技巧进阶(五)

10.python3实用编程技巧进阶(五)

5.1.如何派生内置不可变类型并修其改实例化行为

修改实例化行为

# 5.1.如何派生内置不可变类型并修其改实例化行为

#继承内置tuple, 并实现__new__,在其中修改实例化行为
class IntTuple(tuple):
    def __new__(cls, iterable):
        #过滤掉元祖中不是int类型且小于0的元素
        f_it = (e for e in iterable if isinstance(e, int) and e > 0)
        return super().__new__(cls, f_it)

int_t = IntTuple([1, 8, -2, -3, 'abc', [4,5], 10])

print(int_t)    #(1, 8, 10)

5.2.如何为创建大量实例节省内存

定义类的__slots__属性,声明实例有哪些属性(关闭动态绑定)

#5.2.如何为创建大量实例节省内存

class Player1:
    def __init__(self,uid, name, level):
        self.uid = uid
        self.name = name
        self.level = level


class Player2:
    #定义类的__slots__属性,声明实例有哪些属性(关闭动态绑定)
    __slots__ = ['uid', 'name', 'level']
    def __init__(self,uid, name, level):
        self.uid = uid
        self.name = name
        self.level = level

p1 = Player1(1,'derek',20)
p2 = Player2(2,'jack',50)
print(p1.name)
print(p2.name)
#可以为实例动态添加属性,但是这样会消耗内存
p1.age = 18
print(p1.__dict__['age'])    #18

#用__slot__声明了实例有哪些属性后,则不能动态为实例添加属性
#p2.age = 22    #AttributeError: 'Player2' object has no attribute 'age'

 5.3.如何创建可管理的对象属性

一般写法

#5.3.如何创建可管理的对象属性

class Student():
    def __init__(self,score):
        self.score = score

    def get_score(self):
        return self.score

    def set_score(self, score):
        if not isinstance(score, int):
            raise TypeError("wrong type")
        self.score = score

s = Student(70)
print(s.get_score())

s.set_score(80)
print(s.score)

用property装饰器

#5.3.如何创建可管理的对象属性

class Student():
    def __init__(self,score):
        self.score = score

    @property
    def value(self):
        return self.score

    @value.setter
    def value(self, score):
        if not isinstance(score, int):
            raise TypeError("wrong type")
        self.score = score

s = Student(70)
print(s.value)

s.value = 80
print(s.value)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python3实用编程技巧进阶

    第1章 课程简介(本课程基于py3.x并赠送py2.x的讲解) 第2章 数据结构与算法相关问题与解决技巧 第3章 复杂场景下字符串处理相关问题与...

    py3study
  • 7.python3实用编程技巧进阶(二)

    zhang_derek
  • 6.python3实用编程技巧进阶(一)

     如下元祖,通过函数判断年龄和性别,但是这样代码可读性很差,别人并不知道student[1],student[2]代表什么意思。如何解决呢

    zhang_derek
  • 8.python3实用编程技巧进阶(三)

    zhang_derek
  • 9.python3实用编程技巧进阶(四)

    zhang_derek
  • Python2 与Python3的版本区别实例分析

    本文实例讲述了Python2 与Python3的版本区别。分享给大家供大家参考,具体如下:

    砸漏
  • 程序员编程的10个实用技巧...| 慕课网

    下面是我自己在工作中学到的一些简单的技巧和策略,希望能对各位有用。   1.橡皮鸭调试法    不知道各位有没有这样的经历,当你正在给别人描述问题的...

    IMWeb前端团队
  • Python编程 高阶函数使用技巧

    高阶函数指的是能接收一个或多个函数作为参数的函数,python中有一些内置的高阶函数,在某些场合使用可以提高代码的效率。

    快学Python
  • 编程大神进阶之路:Python技巧小贴士

    整理用户输入的问题在编程过程中极为常见。通常情况下,将字符转换为小写或大写就够了,有时你可以使用正则表达式模块「Regex」完成这项工作。但是如果问题很复杂,可...

    昱良
  • 编程大神进阶之路:Python技巧小贴士

    整理用户输入的问题在编程过程中极为常见。通常情况下,将字符转换为小写或大写就够了,有时你可以使用正则表达式模块「Regex」完成这项工作。但是如果问题很复杂,可...

    CDA数据分析师
  • 编程大神进阶之路:Python技巧小贴士

    整理用户输入的问题在编程过程中极为常见。通常情况下,将字符转换为小写或大写就够了,有时你可以使用正则表达式模块「Regex」完成这项工作。但是如果问题很复杂,可...

    Python数据科学
  • 编程大神进阶之路:Python技巧小贴士

    介绍 Python 炫酷功能(例如,变量解包,偏函数,枚举可迭代对象等)的文章层出不穷。但是还有很多 Python 的编程小技巧鲜被提及。因此,本文会试着介绍一...

    机器之心
  • 用这10个小技巧加速Python编程

    编码很有趣,而Python编码更有趣,因为有很多不同的方法可以实现相同的功能。但是,大多数时候都有一些首选的实现方法,有些人将其称为Pythonic。这些Pyt...

    小白学视觉
  • python新式类和经典类的区别实例分析

    新式类就是 class person(object): 这种形式的, 从py2.2 开始出现的

    砸漏
  • 五个技巧教你用编程实现数据可视化

    导读:数据可视化可以通过视觉形式来呈现抽象的数据信息,有利于对数据进行更深入的观察和分析,除了使用现有的可视化软件和工具,也可以用编程定制属于自己的数据可视化,...

    钱塘数据
  • 五个技巧教你用编程实现数据可视化

    大数据文摘
  • bash编程之xargs实用技巧

    xargs结合管道操作符|,可以完成很多看似复杂的问题: 1、快速删除所有.log日志文件 机器运行久了,就会有各式各样的日志文件,散落在各个目录下,可以利用下...

    菩提树下的杨过
  • 32个实用matlab编程技巧

    今天给大家介绍一些编程小技巧,之前给大家介绍过matlab编程小技巧,本期是在之前的基础之上做了修正和补充完善,下面一起来看看吧。

    matlab爱好者
  • 软件测试进阶之4——编程语言学习技巧

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    MyJie

扫码关注云+社区

领取腾讯云代金券