Python——面向对象

类属性property
作用:
property可以定义一个方法名为私有属性的名字, 让用户可以访问, 但不能修改, 保护数据的
安全性;
属性名.setter在给属性赋值时, 先做判断;
属性名.deleter使用内置del删除属性时,自动执行的内容;

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

student1 = Student("one", 111)

print student1.name
print student1.__score

这里写图片描述

查看方法

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

student1 = Student("one", 111)

print student1.name
print student1._Student__score

这里写图片描述

property应用: 信息分页显示
主机信息有很多, 为了美观, 分页显示;
当用户选择第n页, 显示该页需要的数据从哪条开始, 哪条结束;
将start, end返回给后端, 将需要的数据响应给前端;

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

    @property
    def age(self):
        return self.__age

student1 = Student("one", 11, 111)
print student1.age

这里写图片描述

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

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

    def __judge(self):
        if 0 <= self.__score <= 100:
            print "Y"
        else:
            print "N"

student1 = Student("one", 111)

print student1.name
print student1._Student__score
student1._Student__judge()

这里写图片描述

改变类的字符串显示 strrepr
str : 当打印对象时自动调用;
repr : 当在交互式环境中, 直接输入对象时, 自动调用;
如果 str 没有定义时, 那么打印对象自动调用 repr ;
功能: 简化脚本测试和调试时的实例输出;

class Student(object):
    def __init__(self, name, sid):
        self.__name = name
        self.__sid = sid

    def __str__(self):
        return "Student(%s)"  %(self.__name)

    def __repr__(self):
        return "<%s %s>" %(self.__name, self.__sid)

if __name__ == "__main__":
    s = Student("westos", 001)
    print s
    s

这里写图片描述

In [3]: import duixiang

In [4]: s = dui
duixiang      duixiang.py   duixiang.pyc  

In [4]: s = duixiang.Student("python", "110")

In [5]: s
Out[5]: <python 110>

这里写图片描述

自定义字符串的格式
format

_riqi = {
    'nyr' : '{d.year}-{d.month}-{d.day}',
    'yrn' : '{d.month}/{d.day}/{d.year}',
    'ryn' : '{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 = 'nyr'
        fmt = _riqi[code]
        return fmt.format(d=self)

d = Date(2018,1,9)
print format(d)
print format(d,'ryn')
print format(d,'yrn')

这里写图片描述

索引: getitemsetitemdelitem

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

    def __getitem__(self, item):
        print "__getitem__",item

    def __setitem__(self, key, value):
        print "__setitem__", key, value

    def __delitem__(self, key):
        print "__delitem__", key

s = Student("van")
print s['name']
name =s['name']

s['name'] = 'one'

del s['name']

这里写图片描述

切片: getslice 和 __setslicedelslice

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 "set", i, j, item

    def __delslice__(self, i, j):
        print "del", i, j

s = Student("van", 122)

s[0:3]
s[0:3] = [3,9,0]
del s[0:3]

这里写图片描述
迭代 iter

class Student(object):
    def __init__(self, name):
        self.name = name
        self.scores = [5,31,22]

    def add_score(self, score):
        self.scores.append(score)

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

s = Student("lalal")
s.add_score(97)

print s.scores

from collections import Iterable
print isinstance(s, Iterable)

for i in s:
    print i

这里写图片描述
元类(‘type’)
在python中,一切皆对象; Linux下一切皆文件;

class Student(object):
    print 'ccc'

s = Student()

print type(s)
print type(Student)

这里写图片描述
动态的创建类

def choose(name):
    if name == 'ch':
        class CS(object):
            pass
        return CS
    else:
        class MS(object):
            pass
        return MS

myclass = choose('ch')
print myclass

这里写图片描述
type动态创建类
type(对象)
type(类名, 元组方式存储父类,属性 )

def choose(name):
    if name == 'ch':
        class CS(object):
            pass
        return CS
    else:
        class MS(object):
            pass
        return MS

myclass = choose('ch')
print myclass

这里写图片描述

展开阅读全文

没有更多推荐了,返回首页