类的进阶

类的三大特性

1,封装

2,继承

3,多态

为什么需要类!

运用“类”和“对象”的编程方法,叫做OOP(面向对象)

为什么要OOP!

开发的基本原则:

1,避免重复代码的调用

2,代码易读性,扩展性

 

“类”的成员:

字段

 普通字段

 静态字段

方法

 普通方法

 类方法

 静态方法

属性

 普通属性

 

 

一、字段

普通字段与静态字段的区别:

 静态字段属于“类”

 普通字段属于“对象”

代码中的体现:

class Province:

    country = "China"

    def __init__(self,name):

        self.name = name

 

p1 = Province("JiangSu")

p2 = Province("HeBei")

 

print(p1.name,p1.country)

print(p2.name,p2.country)

 

 

如果一个字段是所有对象共享的,那么这个字段建议用静态字段,

why?

 内存消耗的问题,

静态字段保存在类中,n个对象共享一个内存地址

普通字段保存在对象中,一个对象就需要占用一个内存字段

 

二,方法

普通方法:由“对象”调用;至少一个“self”参数;执行普通方法时,自动将调用该方法的对象赋值给self;

类方法:由“类”调用,至少一个“cls”参数,执行类方法时,自动将调用该方法的“类”复制给cls;

静态方法:由“类”调用,无默认参数

这三种方法在内存中都属于类!

代码:

class Foo:

    def __init__(self,name):

        self.name = name

    def ord_func(self):

        '''定义普通方法,所以必须要self参数'''

        print("普通方法")

    @classmethod

    def class_func(cls):

        '''定义类方法,至少有一个cls参数'''

        print("类方法")

    @staticmethod

    def static_func():

        '''定义静态方法,无默认参数'''

        print("静态方法")

#生成对象

f = Foo('abc')

#调用普通方法

f.ord_func()

#调用类方法

Foo.class_func()

#调用静态方法

Foo.static_func()

 

三,属性

属性其实就是“普通方法”的变种!

属性的基本使用:

class Goods:

    @property

    def price(self):

        print ("alben")

 

obj = Goods()

调用属性

result = obj.price

 

 

属性的定义与调度注意点:

1,在普通方法的基础上,添加装饰器@property

2,定义时只需要一个“self”参数

3,调用时不需要括号“()”

 

例:

 数据库中保存了大量主机列表,在读取的时候一般都是分页读取的,每一页显示条目数量固定,这样就需要给定每次读取是从第几条开始,第几条结束。

class Page:

    def __init__(self,current_page):

        self.current_page = current_page

        self.items = 10

 

    @property

    def start(self):

        value = (self.current_page - 1) * self.items

        return value

 

 

    @property

    def end(self):

        value = self.current_page * self.items

        return value

 

p1 = Page(10)

 

p1.start

p2.start
posted @ 2017-06-04 02:05  alben-xue  阅读(137)  评论(0编辑  收藏  举报