码迷,mamicode.com
首页 > 编程语言 > 详细

python面向对象

时间:2017-11-06 23:01:54      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:python   面向   对象   

面向对象技术简介

类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。

数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。

方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。

实例变量:定义在方法中的变量,只作用于当前实例的类。

继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。

实例化:创建一个类的实例,类的具体对象。

方法:类中定义的函数。

对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。


1.类和实例


类的创建

class后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),

表示该类是从哪个类继承下来的,继承的概念我们后面再讲,通常,

如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类

class Student(object):

    pass


定义好了Student类,就可以根据Student类创建出Student的实例,创建实例是通过类名+()实现

bart = Student()

>>> bart

<__main__.Student object at 0x10a67a590>

>>> Student

<class ‘__main__.Student‘>


由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。

通过定义一个特殊的__init__方法,在创建实例的时候,就把name,score等属性绑上去


class Student(object):


    def __init__(self, name, score):

        self.name = name

        self.score = score

访问限制

如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,

实例的变量名如果以__开头,就变成了一个私有变量(private),

只有内部可以访问,外部不能访问


class Student(object):


    def __init__(self, name, score):

        self.__name = name

        self.__score = score


    def print_score(self):

        print(‘%s: %s‘ % (self.__name, self.__score))


好处:这样就确保了外部代码不能随意修改对象内部的状态,这样通过访问限制的保护,代码更加健壮



但是如果外部代码要获取name和score怎么办?可以给Student类增加get_name和get_score这样的方法

class Student(object):

    ...


    def get_name(self):

        return self.__name


    def get_score(self):

        return self.__score

如果又要允许外部代码修改score怎么办?可以再给Student类增加set_score方法

class Student(object):

    ...


    def set_score(self, score):

        self.__score = score

__slots__函数

dict字典是可以随意操作数据,在实例的dict只保持实例的变量,

对于类的属性是不能保存的,类的属性包括变量和函数。

__slots__是一个元组,包括了当前能访问到的属性。

当定义了slots后,slots中定义的变量变成了类的描述符,相当于java,c++中的成员变量声明,

类的实例只能拥有slots中定义的变量,不能再增加新的变量。注意:定义了slots后,就不再有dict


class Student(object):

    __slots__ = (‘x‘)

    x = 9



def __init__(self):

    pass



b = Student()

b.x = 1

print b.x


报错:

       Traceback (most recent call last):

       File "F:/python/python_Test.py", line 15, in <module>

       b.x = 1

       AttributeError: ‘Student‘ object attribute ‘x‘ is read-only

   

   



本文出自 “Django编码坑” 博客,请务必保留此出处http://13435380.blog.51cto.com/13425380/1979223

python面向对象

标签:python   面向   对象   

原文地址:http://13435380.blog.51cto.com/13425380/1979223

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!