全栈工程师后端开发者CreatShare

Python基础 | 类相关

2017-06-11  本文已影响116人  采风JS

Python作为一种动态语言,有自己的特性。学习了部分关于Python中类相关的内容之后,总结几点小知识,更好的温习。

一、创建大量实例节省内存

class Player1(object):
    def __init__(self,uid,name,status=0,level=1):
        self.uid = uid
        self.name = name
        self.status = status
        self.level = level
    
class Player2(object):
    # 声明出仅有的四个属性,不能在运行中动态绑定属性
    __slots__=['uid','name','status','level']
    def __init__(self,uid,name,status=0,level=1):
        self.uid = uid
        self.name = name
        self.status = status
        self.level = level

二、创建可管理的对象属性

from math import pi
class Circle(object):
    def __init__(self,radius):
        self.radius = radius
    def getRadius(self):
        # 可以对输入的数据进行四舍五入
        return round(self.radius,2)
    # 使用方法设置后,属性类型可以确定
    def setRadius(self,value):
        if not isinstance(value,(int,float)):
            raise ValueError('错误类型')
        self.radius = value
    def getAreas(self):
        return self.radius ** 2 * pi
    # 用于快速访问方法属性
    R = property(getRadius,setRadius)

c = Circle()
c.R
c.R = 13

三、描述符对实例属性做类型检查

class Attr(object):
    def __init__(self,name,type_):
        self.name = name
        self.type_ = type_
           
    def __get__(self,instance,cls):
        return instance.__dict__[self.name]
    
    def __set__(self,instance,value):
        if not isinstance(value,self.type_):
            raise TypeError("required type: %s " % self.type_)
        instance.__dict__[self.name] = value
        
    def __delete__(self,instance):
        del instance.__dict__[self.name]
        
class Person(object):
    name = Attr('name',str)
    age = Attr('age',int)
    email = Attr('email',str)

四、环形引用的对象销毁

import weakref
class Data(object):
    def __init__(self,value,own):
         self.value = value
         self.own = weakref.ref(own)
    def __str__(self):
        return "%s's data,value is %s" %(self.own(),self.value)
    def __del__(self):
        print ('in Data del')

class Node(object):
    def __init__(self,value):
        self.value = Data(value,self)
    def __del__(self):
        print ('in Node del')

今年的六月,相对还是很温和的,相比于之前年份的六月,只能说以前太残忍。趁着机会,伴着微风,开心向前。

上一篇下一篇

猜你喜欢

热点阅读