摘要:面向对象最重要的概念应该就是类和实例了。记得以前学习的时候,有一个比较简单的例子来解释类和实例。构造函数类中可以定义一个构造函数。构造函数的意思就是类在创建的时候会执行的函数。在实例中通过构造函数添加的或者在类外动态添加的属性可以。
面向对象最重要的概念应该就是类(class)和实例(instance)了。记得以前学习java的时候,有一个比较简单的例子来解释类和实例。
在汽车制造过程中,我们需要先设计图纸,让后再根据图纸来制造实际的汽车。类就相当于图纸,而实例则是实际的汽车。一张图纸可以造出很多汽车,刚造出的汽车是一样的,但是后续可以进行个性化的改装。
python可以根据class在内存中创建多个实例,每个实例可以独立地添加和修改方法和属性。
class Car(Vehicle): pass
我们来说明一下,class关键词来声明这是一个类,紧接着就是类名。后接一个(),里面是该类所继承的父类。
在2.7中,一个类如果没有继承其它类,则可以另其继承object类。那么这样定义的就是一个new style object,即新式类。
如果不声明继承自何类,那么定义的则是经典类。
例如:
# 定义新式类 class Student(object): pass # 定义经典类 class Student2: pass
新式类和经典类的区别出了写法不一样外,还存在其它区别:
新式类的类型是type,经典类的类型是classobj。新式类的出现就是为了将所有类的类型统一为type。
对于多继承,继承搜索的顺序发生了改变。(这里不懂)
默认属性发生了改变
可能还有其它
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__函数经常用于对实例属性进行初始化。
类中的函数类中的函数也叫做方法。方法与其它函数有所区别,即方法的第一个参数永远是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
怎么给实例或类动态添加方法?先挖个坑,学习了再写。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/38273.html
摘要:前言最近跟着流畅的和学习,看到装饰器部分,有些头大倒不是因为概念难以理解,而是书和网上文章中有些地方有些矛盾之处在简单学习和实践之后,整理出我对装饰器的理解如下装饰器的定义在不同语境下,装饰器有不一样的含义,我大致认为有种定义一种把另一个对 前言 最近跟着《流畅的Python》和《Python Cookbook》学习,看到装饰器部分,有些头大倒不是因为概念难以理解,而是书和网上文章中有...
摘要:一的基本语法缩进统一个或者个空格。中的数据类型中有个标准类型数字字符串列表元组集合字典数字复数在中,只有一种整数类型,表示长整型。如则会显示,并不是换行。空行与代码缩进不同,空行并不是语法的一部分。我们将首行及后面的代码组称为一个子句。 一、python3的基本语法 1、缩进统一(1个tab或者4个空格)。 for i in range(10): print (i) ...
摘要:本人很少写代码一般都是用的去年时用写过一些收集系统信息的工具当时是边看手册边写的如今又要用来写一个生成的工具就又需要查看手册了至于为什么不用写那是因为的库不兼容永中在这里不得不说虽然很火但是一些库还是不如多不如兼容性好为了避免以后再出这种事 Python3 Study Notes 本人很少写 python 代码, 一般都是用 go 的, 去年时用 python 写过一些收集系统信息的工...
一、类(PT第九章) 9.3.4 方法对象 class MyClass: A simple example class i = 12345 def f(self): return hello world xf = x.f while True: print xf() 方法的特别之处在于实例对象被作为函数的第一个参数传给了函数。在我们的示例中,调用x...
阅读 2960·2021-11-23 09:51
阅读 2766·2021-11-11 16:55
阅读 2827·2021-10-14 09:43
阅读 1376·2021-09-23 11:22
阅读 1017·2019-08-30 11:04
阅读 1637·2019-08-29 11:10
阅读 930·2019-08-27 10:56
阅读 3079·2019-08-26 12:01