• python--类


    # -*- coding: utf-8 -*-
    import math
    zero = 0.0001
    
    class Point(object): #继承自系统的object类
        '''三维点的类
        '''
        count = 0 #静态成员变量
        def __init__(self, x=0, y=0, z=0):
            '''构造函数
            '''
            self.x = x
            self.y = y
            self.z = z
            Point.count += 1
        def __del__(self):
            '''析构函数
            '''
            Point.count -= 1
        @staticmethod
        def getNumber(cls):
            '''静态方法
            '''
            return Point.count
        @classmethod
        def getNumber2(cls):
            '''类方法
            '''
            return Point.count
    
        #属性
        def __getattr__(self, name):
            try:
                return self.__dict__[name]
            except:
                print '没有该属性'
                return None
        def __setattr__(self, name, value):
            self.__dict__[name] = value
        def __delattr__(self, name):
            del self.__dict__[name]
    #    def __getattribute__(self, name):
    #        return self.__dict__[name]
        def __contains__(self, value):
            '''in
            '''
            return self.x==value or self.y==value or self.z==value
    
        #转换
        def __repr__(self):
            return str(self.x) + '	' + str(self.y) + '	' + str(self.z)
        def __int__(self):
            return Point(int(x), int(y), int(z))
    
        #比较
        def __eq__(self, p):
            '''==
            '''
            return math.sqrt((self.x-p.x)*(self.x-p.x) + (self.y-p.y)*(self.y-p.y)
                             + (self.z-p.z)*(self.z-p.z)) < zero
        def __cmp__(self, other):
            if x < other.x:
                return -1
            elif x > other.x:
                return 1
            elif y < other.y:
                return -1
            elif y > other.y:
                return 1
            elif z < other.z:
                return -1
            elif z > other.z:
                return 1
            else:
                return 0
        def __lt__(self, other):
            '''<
            '''
            if x < other.x:
                return True
            elif x > other.z:
                return False
            elif y < other.y:
                return True
            elif y > other.y:
                return False
            elif z < other.z:
                return True
            else:
                return False
        def __gt__(self, other):
            '''>
            '''
            pass
    
        #运算
        def __add__(self, other):
            return Point(self.x+other.x, self.y+other.y, self.z+other.z)
        def __sub__(self, other):
            return Point(self.x-other.x, self.y-other.y, self.z-other.z)
        def __mul__(self, other):
            if isinstance(other, Point):
                return self.x*other.x + self.y*other.y + self.z*other.z
            else:
                return Point(self.x*other, self.y*other, self.z*other)
        def __div__(self, c):
            return Point(self.x/c, self.y/c, self.z/c)
        def __mod__(self, c):
            '''%
            '''
            pass
        def __divmod__(self, c):
            pass
        def __pow__(self, c):
            '''**
            '''
            pass
        def __pos__(self):
            '''+(正号)运算符重载
            '''
            return Point(+self.x, +self.y, +self.z)
        def __neg__(self):
            '''-(负号)运算符重载
            '''
            return Point(-self.x, -self.y, -self.z)
        def __iadd__(self, other):
            '''+=运算符重载
            '''
            self.x += other.x
            self.y += other.y
            self.z += other.z
            return self
        def __truediv__(self, c):
            pass
        def __floordiv__(self, c):
            '''//
            '''
            pass
        def __invert__(self):
            '''~取反
            '''
            pass
        def __or__(self, other):
            '''|
            '''
            pass
        def __and__(self, other):
            '''&
            '''
            pass
        def __xor__(self, other):
            '''^
            '''
            pass
        def __lshift__(self, n):
            '''<<
            '''
            pass
    
        #序列
        def __len__(self):
            return 3
        def __getitem__(self, index):
            if index == 0:
                return x
            elif index == 1:
                return y
            elif index == 2:
                return z
            else:
                return None
        def __setitem__(self, index, value):
            if index == 0:
                x = value
            elif index == 1:
                y = value
            elif index == 2:
                z = value
            else:
                return None
        def __delitem__(self, index):
            pass
        def __iter__(self):
            '''for in
            '''
            pass
        def __getslice__(self, start, end):
            pass
    
    print issubclass(Point, object)
    print Point.__bases__
    p = Point(1,2,3)
    print isinstance(p, Point)
    print hasattr(p, 'z')
    print 4 in p

     普通成员为public,单下划线开头为protected,双下划线开头为private

  • 相关阅读:
    DatePicker 日期选择器 split-panels 数组的时候,清空这个费劲啊,最后走的后门
    英语音标总结
    前台发布地址动态获取 本机地址
    SecureCRT windows 登录 linux
    The History of the English language 英语语音的起源
    iview 部分表单验证
    iView 表单验证 如果prop字段和表单里的字段对不上,会触发校验,提示错误信息
    hdu4370 0 or 1
    即时通讯上手必备知识点
    不使用Math.random实现随机数。
  • 原文地址:https://www.cnblogs.com/saieuler/p/3620627.html
Copyright © 2020-2023  润新知