python 面向对象2

类属性property
作用:1.property可以定义一个方法为私有属性的名字,让用户可以访问年,但不能修改,可以保护数据的安全性
2.@属性名.setter给私有属性赋值时,先做判断
3.@属性名.deleter使用内置del删除属性的时候,自动执行的内容
class Student(object):
        def __init__(self,name,age,source):
                self.name = name
                self.__age = age
                self.__source = source
        @property
        def age(self):
                return self.__age
        @age.setter
        def age(self,value):
                if isinstance(value,int) and 0< value <100:
                        self.__age = value
                        print "age%s" %(self.__age)
                else:
                        self.__age = 0
                        print "error"
        @age.deleter
        def age(self):
                print "age:%s can not delete" %(self.__age)
student = Student("tom",12,80)
print student.age
student.age = 120
print student.age



第二种方法:property(get,fset,fdel,fdoc)


class Student(object):
        def __init__(self,name,age,source):
                self.name = name
                self.__age = age
                self.__source = source
        def get_age(self):
                return self.__age
        def set_age(self,value):
                if isinstance(value,int) and 0< value <100:
                        self.__age = value
                        print "age:%s" %(self.__age)
                else:
                        self.__age = 0
                        print "error"
        def del_age(self):
                print "age:%s can not delete" %(self.__age)
        age = property(get_age,set_age,del_age)
student = Student("tom",12,80)
print student.age
student.age = 66
print student.age
del student.age


property应用:信息分页显示
1.主机信息的分页显示
2.当用户选择第N页的时候,显示该页需要的数据从那条开始,那条结束
3.将start,end返回给后端,将需要的数据响应给前端
#!/usr/bin/env python
# coding:utf-8
hostinfo = ['172.25.254.'+ str(i) for i in range(1,101)] #列表生成式,自定义主机
信息
class page(object):
        def __init__(self,current_page,per_items):
                #显示第N页的信息
                self.__current_page = current_page
                #每页显示多少条信息
                self.__per_items = per_items
        @property
        def start(self):
                val = (self.__current_page-1)*self.__per_items
                return val
        @property
        def end(self):
                val = self.__current_page*self.__per_items
                return val
p = page(4,6)
print hostinfo[p.start:p.end]


私有成员和共有成员
1.私有属性:类内部可以访问,对象不能访问;子类不能访问,子类的对象不能访问
2.共有属性:私有属性可以和不可以访问的都可以访问


#!/usr/bin/env python
# coding:utf-8
class student(object):
        def __init__(self,name,source):
                self.name = name
                self.__source = source
        def __judge(self):
                if 90< self.__source <=100:
                        print "A"
                elif 70< self.__source <=90:
                        print "B"
                else:
                        print "D"
class mathstudent(student):
        def getsource(self):
                print self.__source
student1 = student("tom",91)
print student1._student__source
student1._student__judge()
student2 =mathstudent ("lali",69)
print student2.name
print student2._student__source
# __source为私有属性,不能直接访问,访问时必须在前面加上那个它所属的类


改变类的字符串的显示__str__和__repr__
1.__str__:当打印对象时自动调用
2.__repr__:当在交互式环境中,直接输入对象的时候自动调用
3.如果__str__没有定义的时候,那么打印对象自动调用__repr__




自定义字符串的格式
1.__format__
#!/usr/bin/env python
# coding:utf-8
_formats = {
        'ymd':'{d.year}/{d.month}/{d.day}',
        'mdy':'{d.month}/{d.day}/{d.year}',
        'dmy':'{d.day}/{d.month}/{d.year}'
}
class data(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 = data(1995,10,18)
print format(d)
print format(d,'mdy')



索引:__getitems__和__setitems__和__delitems__


#!/usr/bin/env python
# coding:utf-8
class student(object):
        def __init__(self,name,age):
                self.name = name
                self.__age = age
        def get_age(self):
                return self.__age
        def __getitem__(self,item):#当访问某个属性时,自动执行的魔术方法
                return None
        def __setitem__(self,key,value): #给属性赋值时自动调用的方法
                self.__dict__[key] = value
                print "ok"
        def __delitem__(self,key): #删除属性时自动调用的方法
                del self.__dict__[key]
                print "del ok"
s = student("tom",18)
print s.__dict__
s['name'] = 'huba'
del s['name']





切片: __getslice__和__setslice__和__delslice__




#!/usr/bin/env python
# coding:utf-8
class student(object):
        def __init__(self,name,age):
                self.name = name
                self.__age = age
        def __getslice__(self,i,j):
                print "get",i,j
        def __setslice__(self,i,j,item):
                print "get",i,j,item
        def __delslice__(self,i,j):
                print "del",i,j
s = student("tom",18)
s[0:3]
s[0:3] = [13,45,69]

del s[0:3]



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值