私有属性和私有方法;及魔术方法

class Student(object):
    def __init__(self, name='a', score=100):
        self.name = name
        # 在类里面, 双下划线开头的变量名称为私有属性;
        # 私有属性在该类的其他方法中可以使用;外部不能直接调用私有属性;
        # 私有属性实质是把self.__score改名为self._类名__score;
        self.__score = score

    #  # 在类里面, 双下划线开头的函数名称为私有方法;
    # 父类的私有方法, 子类不能继承;
    def __get_score(self):
        return self.__score

thStudent(Student):
    def __init__(self, name, score, IQ):
        super(MathStudent, self).__init__(name, score)
        self.IQ = IQ

    def ok(self):
        super(MathStudent, self).__get_score()
        print 'ok.....'
 
s = MathStudent('a', 'hello', 100)

print s.__get_score()


_formats    魔术方法

_formats = {
    'ymd': '{d.year}-{d.month}-{d.day}',
    'mdy': '{d.month}/{d.day}-{d.year}',
    'dmy': '{d.day}/{d.month}/{d.year}',

}
class Date(object):
    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day

    def __format__(self, code):
        if code == '':
            code = 'ymd'
        fmt = _formats[code]
        return fmt.format(d=self)

d = Date(2018, 1, 9)

print format(d, 'ymd')
print format(d, 'mdy')

print format(d, 'dmy')

````

2018-1-9
1/9-2018

9/1/2018

__iter__ 魔术方法

from collections import Iterable
class Student(object):
    def __init__(self,name):
        self.name=name
        self.score=[100,90,89]

    def __iter__(self):
        print '判断self.score是否可迭代'  ##self.score可迭代
        print iter(self.score)  ##打印self.score迭代类型:为列表迭代对象
        for i in self.score:    ##遍历self.score
            print i
        return self.score      
s=Student('fentiao')
print s.__iter__()

`````
判断self.score是否可迭代
<listiterator object at 0x7f3bc2420c90>
100
90
89
[100, 90, 89]




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

    def __iter__(self):
        return iter(self.score)

    def __ge__(self, other):
        avg1 = sum(self.score) / len(self.score)
        avg2 = sum(other.score) / len(other.score)
        return avg1 == avg2

    def __gt__(self, other):
        avg1 = sum(self.score) / len(self.score)
        avg2 = sum(other.score) / len(other.score)
        if avg1 > avg2:
            print "avg1"
        else:
            print "avg2"
        return avg1 < avg2

    def __le__(self, other):
        pass

    def __lt__(self, other):
        pass
s = Student('fentiao', [55, 12,22])
s1 = Student('fendai', [77, 35,55,25])
print s.__ge__(s1)

print s.__gt__(s1)
切片魔术方法(迭代)

from collections import Iterable

class Student(object):
    def __init__(self, name):
        self.name = name
        self.score = [100, 90, 89, 100, 89]

    def __getslice__(self,i, j):
        return  self.score[i:j]

    def __setslice__(self, i, j, item):
        self.score[i:j] = item
        
    def __delslice__(self, i, j):
        del self.score[i:j]

s1 = Student('fentiao')
print s1[1:4]
s1[1:4]=[0, 0, 0]
print  s1[1:5]

s1[1:4]= [100, 60, 80]

del s1[0:3]

print s1[0:5]


[90, 89, 100]
[0, 0, 0, 89]
[80, 89]




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值