python学习笔记-类和实例

面向对象最重要的概念应该就是类(class)和实例(instance)了。记得之前学习java的时候,有一个比较简单的例子来解释类和实例。
在汽车制造过程当中,咱们须要先设计图纸,让后再根据图纸来制造实际的汽车。类就至关于图纸,而实例则是实际的汽车。一张图纸能够造出不少汽车,刚造出的汽车是同样的,可是后续能够进行个性化的改装。
python能够根据class在内存中建立多个实例,每一个实例能够独立地添加和修改方法和属性。java

定义类

class Car(Vehicle):
    pass

咱们来讲明一下,class关键词来声明这是一个类,紧接着就是类名。后接一个(),里面是该类所继承的父类。
在2.7中,一个类若是没有继承其它类,则能够另其继承object类。那么这样定义的就是一个new style object,即新式类。
若是不声明继承自何类,那么定义的则是经典类。
例如:python

# 定义新式类
class Student(object):
    pass

# 定义经典类    
class Student2:
    pass

新式类和经典类的区别出了写法不同外,还存在其它区别:函数

  1. 新式类的类型是type,经典类的类型是classobj。新式类的出现就是为了将全部类的类型统一为type学习

  2. 对于多继承,继承搜索的顺序发生了改变。(这里不懂)设计

  3. 默认属性发生了改变code

  4. 可能还有其它对象

Python 3.x以上版本全部的类均是新式类,不须要显式地继承object继承

__init__构造函数

类中能够定义一个构造函数__init__。构造函数的意思就是类在建立的时候会执行的函数。__init__函数的第一参数是self,指实例自己。__init__函数还能够有多个参数,这些参数须要在实例建立的时候传入。
例如:内存

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

__init__函数常常用于对实例属性进行初始化。get

类中的函数

类中的函数也叫作方法。方法与其它函数有所区别,即方法的第一个参数永远是self,即实例自己。
建立实例后,在调用方法是,并不须要传入实例,由于编译器为自动为咱们加入实例。例如:

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

    # 方法的第一个参数是self
    def print_name(self):
        print self.name

student = Student("charlie", 20, 'male')

#调用函数的时候,并不须要手动传入实例student
student.print_name()

两个特殊的函数

classmethod和staticmethod。
简单粗浅地说,能够理解成:

  • classmethod的是定义一些仅仅跟类有关,可是跟实例无关的方法。

  • staticmethod是一些跟类有关系的功能,可是其具体的实现却又不须要用到类或者实例的参与。staticmethod叫作静态方法。

更多解释和例子,能够阅读知乎上的回答:https://www.zhihu.com/questio...

类的属性

属性就更加好理解了。
例如咱们设计一张制造冰箱的图纸,咱们除了定义冰箱的功能(类的方法)外,还须要定义冰箱的颜色、长、宽、高、等属性。类也同样。

class Fridge(object):
    color = 'yellow'
    height = 120
    width = 30
    food = 'fish'

    def storage(self):
        print "keep %s fresh" % self.food

fridge = Fridge()
fridge.storage()

类的封装性

上面咱们讲了这么多类的特性,其实类就是一个数据类型。咱们把一种数据类型封装成一个类。
例如一个学生具备姓名、年龄、性别等属性,另外他也有书写姓名、读书识字等功能。咱们能够把一个Student全部的属性和功能当作一个总体,那么这就是一个类。这个类就是与python中内置的其它数据类型同样的数据类型,只不过这是咱们自定义的,叫Student。

建立实例

建立实例的方法十分简单。即:

student = Student(括号内传入在__init__函数中定义的参数)

python是一门动态语言。建立好的实例能够自由地添加属性。在类中声明的read-only的属性,在实例中不能del。在实例中经过构造函数添加的或者在类外动态添加的属性能够del。
类中的read-only属性只能经过类属性的形式删除。

class Fridge(object):
    color = "yellow"
    width = 20

    def __init__(self, height):
        self.height = height

    def storage(self):
        print "keep %s fresh"

fridge = Fridge(100)
fridge.name = "Haier"

del fridge.color # AttributeError 报错
del fridge.height
del fridge.name
del Fridge.width

怎么给实例或类动态添加方法?先挖个坑,学习了再写。

相关文章
相关标签/搜索