Python3.0科学计算学习之类
类:
Python中的类是一个抽象的概念,甚至比函数还要抽象。可以把它简单的看作是数据以及由存取、操作这些数据的方法所组成的一个集合。类是Python的核心概念,是面向对象编程的基础。
类有如下的优点:
类对象是多态的:也就是具有多种形态,意味着我们可以对不同的类对象使用同样的操作方法,而不需要额外编写代码。
类的封装:类封装之后,可以直接调用类的对象来操作内部的一些类方法,不需要让使用者看到代码工作的细节。
类的继承:类可以从其他类或者基类中继承它们的方法,直接使用。
(1) 类的定义:
类是对现实世界中一些事物的封装,Python中定义类是通过class关键字,紧跟着的是类名(类名通常是大写字母开头的单词)和冒号,随后是定义类的类体代码。
类定义的语法格式如下:
class Classname(object): #(object)表示该类是从哪个类继承下来的,通常如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类。
"""documentation string"""
<statement_1>
<statement_2>
...
<statement-N>
示例1:类的定义
class People:
#定义基本属性
name='' #name、age是类的公有属性
age=0
#定义私有属性,私有属性在类外部无法直接进行访问,但是可以在内部使用self.__weight来调用。
__weighe=0
#定义构造方法,用于初始化类的内部状态,为类的属性设置默认值:
def __init__(self,n,a,w):
self.name=n
self.age=a
self.__weight=w
#定义一个函数,为类的函数,称为方法;它至少有一个参数self:
def speak(self):
print('%s is speaking:i am %d years old.'%(self.name,self.age))
#类调用
p=people('Tom',10,30)
p.speak() #返回:Tom is speaking:i am 10 years old.
(2) 类属性与方法
使用类的主要原因之一是对象可以组合在一起并绑定在一个共同对象上。
如:q=RationalNumber(10,20) #实例化(instantiation),创建p实例
q.numerator #属性引用/访问(attribute access)
q.denominator
分子和分母是绑定到RationalNumber 类的实例的两个对象,它们被称为实例的属性。从对象引用的方式来看,“对象时类实例的属性”。
r=RationalNumber(10,20)
q.numerator=17
del r.denominator
表明一旦定义了一个实例,就可以设置、更改或者删除该特定实例的属性。注意:更改或删除属性可能会有不希望有的副作用,甚至可能使对象无效。
① 类的公有属性:public_attrs:符合正常的变量命名规则,开头没有下划线,在来的外部可以直接进行访问
② 类的私有属性:__private_attrs:由两个下划线开头,声明该属性为私有,不能在类的外部被使用或者直接访问。在类内部的方法中使用时的格式为:self.__private_attrs.
③ 类的构造方法:
__init__():叫做构造函数或者构造方法,它在生成一个对象时被自动调用。
如上例1中,p=people('Tom',10,30)语句就是调用__init__方法,将参数传递给self.name、self.age、self.__weight
要为示例类提供一些属性,即为其提供定义数据。在例中,该数据将是分子和分母的值。为此,必须定义一个方法__init__,用于初始化具有这些值的类。
示例2:
class RationalNumber:
def __init__(self,numerator,denominator):
self.numerator=numerator
self.denominator=denominator
###在说明添加到类中的特殊__init__函数之前,要展示RationalNumber对象的实例化。
q=RationalNumber(10,20)
print(q.numerator) #返回 10
print(q.denominator)
#返回 20
#类型RationalNumber的新对象通过使用类名称来创建,就像它是一个函数一样。
语句执行两个操作:首先创建一个空对象,然后将__init__函数应用到该空对象,即执行q.__init__(10,20).
__init__的第一个参数是指新对象本身。在函数调用中,其第一个参数被对象的实例所替代。第一参数的特殊作用体现在将其命名为self的惯例上。
④ 类的公有方法:
public_method()--在类的内部,使用def关键字可以为类定义一个办法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数。self在Python中不是关键字,它代表当前对象的地址。
⑤ 类的私有方法:
__private_method():由两个下划线开头,声明该方法为私有方法,不能在类的外部进行调用。在类的内部调用时格式为self.__private_methods()
⑥ 单下划线(_):
以单下划线开始的成员变量叫作保护变量意思是只有类对象和子类对象自己能够访问到达这些变量。
⑦ 类的专有方法:
__init__:构造函数
__del__;析构函数,释放对象时使用
__repr__:打印,转换
__setitem__:按照索引赋值
__getitem__:按照索引获取值
__len__:获取长度、__cmp__:比较运算、__call__:函数调用、
__add/sub/mul/div/mod/pow__:加运算/减运算/除运算/求余运算/乘方运算。
__str__:字符串方法
其中:__repr__的特殊方法使我们能够定义对象在Python解释器中的表示方式
class RationalNumber:
def __init__(self,numerator,denominator):
self.numerator=numerator
self.denominator=denominator
def __repr__(self):
return("{}/{}".format(self.numerator,self.denominator))
q=RationalNumber(10,20)
print(q) #只要输入q就会返回10/20。
2. Python类与对象
(1) 认识其区别:Python里一切都是对象,实例是对象,类是对象,元类也是对象。实例是对象,创建实例的是类;类是对象,创建类的是元类。
在Python中,一个对象的特征称为属性,它所具有的行为称为方法。即,对象=属性+方法。
把具有相同属性和方法的对象归为一个类,例如:人类、动物、植物等都是类的概念。
类是对象的模板或者蓝图,类是对象的抽象化,对象是类的实例化。类不代表具体的事物,而对象代表具体的事物(类是对客观世界中事物的抽象,而对象是类实例化后的实体)。
(2) 对象的创建
创建对象的过程为实力化,当一个对象被创建后,包含三个方面的特性:对象的句柄、属性和方法。对象的句柄用于区分不同的对象。
例如:if __name__=="__main__" #当程序作为主程序运行
fruit=Fruit() #实例化fruit:创建一个对象,创建了一个fruit对象
fruit.grow() #对象调用grow()方法
(3) 类对象支持两种操作:属性引用和实例化。类对象的属性引用使用标准的语法:obj.name.类对象创建后,类命名空间中所有的命名都是有效属性名。
在python中方法定义在类的定义中,但只能被类对象的实例所调用。调用一个方法的途径分三步:
l 定义类和类中的方法
l 创建一个或者若干个实例,即将类实例化
l 用所创建的实例调用方法
实例:
class MyClass: #定义类和类中的方法
"""一个简单的类实例"""
i=12
def f(self):
return("hello world")
#实例化类
MyClass1=MyClass()
#访问类的属性与方法,MyClass1.i和MyClass1.f()都是有效的属性引用,分别返回一个整数和一个方法对象。
print("My Class类的属性i为:",MyClass1.i)
print("MyClass类的方法f输出为:",MyClass1.f()) #用创建的实例调用方法
#可以对类属性赋值,即可以通过给MyClass.i赋值来修改它
MyClass1.i=56
print("修改后My Class类的属性i为:",MyClass1.i)
(4) 类的属性:数据属性和特殊类属性。
数据属性:与局部变量一样,数据属性不需要声明,第一次使用时它们就会生成。
例如:类数据属性说明
class foo(object):
f=100
print(foo.f)
print(foo.f+1) #运行结果: 100
101
特殊类属性:
对任何类foo,它的部分特殊属性如下所示:
foo_name_ 类foo的名字(字符串)
foo_doc_ 类foo的文档字符串
foo_bases_ 类foo的所以父类构成的元组
foo_module_ 类foo定义所在的模块
foo_class_ 实例foo对应的类
例如:
class MyClass(object):
'MyClass 类定义'
myVer='3.4'
def showMyVer(self):
print(MyClass.myVer)
print(dir(MyClass))
print(MyClass.__dict__)
#返回结果:
dir()返回的仅是对象属性的一个名字列表
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'myVer', 'showMyVer']
__dict__返回的是一个字典,它的键是属性名,值是相应属性的数据值。
{'__module__': '__main__', '__doc__': 'MyClass 类定义', 'myVer': '3.4', 'showMyVer': <function MyClass.showMyVer at 0x00000000071B5F28>, '__dict__': <attribute '__dict__' of 'MyClass' objects>, '__weakref__': <attribute '__weakref__' of 'MyClass' objects>}
print(MyClass.__class__) #返回MyClass
print(MyClass.__doc__) #返回MyClass类定义
print(MyClass.__module__) #__main__
实例属性:内建函数dir()可以显示类属性,同样还可以打印所有的实例属性。
class foo(object):
pass
foo_1=foo()
print(dir(foo_1))
#返回结果:
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
Python3.0科学计算学习之类的更多相关文章
- Python3.0科学计算学习之绘图(一)
基本绘图: (1) plot是标准的绘图库,调用函数plot(x,y)就可以创建一个带有绘图的图形窗口(其中y是x的函数).输入的参数为具有相同长度的数组(或列表):或者plot(y)是plot(r ...
- Python3.0科学计算学习之函数
函数 函数允许程序的控制在不同的代码片段之间切换,函数的重要意义在于可以在程序中清晰地分离不同的任务,将复杂的问题分解为几个相对简单的子问题,并逐个解决.即"分而治之". Pyth ...
- Python3.0科学计算学习之绘图(四)
绘制三维图: mplot3d工具包提供了点.线.等值线.曲面和所有其他基本组件以及三维旋转缩放的三维绘图. 1.散点的三维数据图 from mpl_toolkits.mplot3d import ax ...
- Python3.0科学计算学习之绘图(三)
matplotlib对象: 使用matplotlib的pyplot模块,可以供用户直接使用最重要的绘图命令.多数情况下,我们希望创建一个图形并且立即展示出来,但是有时如果生成要通过更改其属性来修改的图 ...
- Python3.0科学计算学习之绘图(二)
(1) np.mashgrid()函数:-----生成网络点坐标矩阵,可以是二维网络矩阵,也可以是三维网络矩阵.其中,每个交叉点就是网络点,描述这些网络点的矩阵就是坐标矩阵(横坐标矩阵X中的每个元素与 ...
- python3在科学计算中的三种常用数据结构
在科学研究中,数据运算是必不可少的,下面介绍python语言在科学计算中常用的数据结构和运算函数. 主要数据结构: (1)列表,用中括号表示,元素之间逗号分隔,每个元素可以是数字,字符,也可以是列表, ...
- Python科学计算学习之高级数组(二)
代码性能和向量化 背景:Python是一种解释型的编程语言,基本的python代码不需要任何中间编译过程来得到机器代码,而是直接执行.而对于C.C++等编译性语言就需要在执行代码前将其编译为机器指令. ...
- Python科学计算学习一 NumPy 快速处理数据
1 创建数组 (1) array(boject, dtype=None, copy=True, order=None, subok=False, ndmin=0) a = array([1, 2, 3 ...
- 2019-04-20 Python之科学计算库学习总结
一.numpy库和matplotlib库的学习 (1)numpy库介绍:科学计算包,支持N维数组运算.处理大型矩阵.成熟的广播函数库.矢量运算.线性代数.傅里叶变换.随机数生成,并可与C++/Fort ...
随机推荐
- Linux Centos 下安装软件 三种方式
1)一种是软件的源代码,您需要自己动手编译它.这种软件安装包通常是用gzip压缩过的tar包(后缀为.tar.gz). 2)另一种是软件的可执行程序,你只要安装它就可以了.这种软件安装包通常被是一个R ...
- Spring实战笔记
晚上看了这本书的前面几章,记录一下自己看到的要点. 全书分为四大部分,Spring核心,web,后台相关,与其它框架集成.今天主要看了第一部分. Spring最根本的使命是简化Java开发,全方位的简 ...
- bzoj2115 [Wc2011] Xor——高斯消元 & 异或线性基
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2115 异或两次同一段路径的权值,就相当于没有走这段路径: 由此可以得到启发,对于不同的走法, ...
- 测试DNS服务的命令
测试DNS服务的命令 dig dig用于测试dns系统,因此不会查询hosts文件进行解析. dig - DNS lookup utility dig [@global-server] [domain ...
- sshfs把远程主机的文件系统映射到本地的目录中(转载)
转自:http://www.fwolf.com/blog/post/329 windows之外的世界比想像中要大得多呢,几乎天天都在用ssh,却到今天才知道有sshfs这个好东西,前几天还在为Zend ...
- Java setAccessible方法作用
在Java中可以通过反射进行获取实体类中的字段值,当未设置Field的setAccessible方法为true时,会在调用的时候进行访问安全检查,会抛出IllegalAccessException异常 ...
- Spring通过注解注入有参
1.通过注解方式注入有参的构造函数 把@Autowired注解放在构造函数上方,在构造函数里写上需要注入的形参即可 2.通过XML配置文件方式定义有参构造函数
- P3258[JLOI2014]松鼠的新家(LCA 树上差分)
P3258 [JLOI2014]松鼠的新家 题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他 ...
- webapp填坑记录
网上也有许多的 webapp 填坑记录了,这几个月,我在公司正好也做了2个,碰到了一些问题,所以我在这里记录一下我所碰到的问题: meta 头部声明在开发的时候,刚刚创建 HTML 文件,再使用浏览器 ...
- 数据结构之单链表(C实现)
list.h #ifndef LIST_H #define LIST_H #include <iostream> #include <stdio.h> #include < ...