不同语言中类中方法的定义

本文主要学习了Python-Java-Scala中的类的不同方法以及包导入机制的一些内容

一.不同语言中的方法

在Python中的方法

01.实例方法 ---的第一个参数必须是”self
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def printInstanceInfo(self):
        print "%s is %d years old" %(self.name, self.age)

02.静态方法  -----没有参数限制,既不需要实例参数,也不需要类参数,定义的时候使用@staticmethod装饰器
@staticmethod
def printClassAttr():
    print Student.count
    print Student.books

03.类方法 -----=以cls作为第一个参数,cls表示类本身,定义时使用@classmethod装饰器。通过cls可以访问类的相关属性
@classmethod
def printClassInfo(cls):
    print cls.__name__
    print dir(cls)
参数
    主要区别在于参数,
    静态方法没有参数限制,既不需要实例参数,也不需要类参数
使用
    实例方法被绑定到一个实例,只能通过实例进行调用;
    但是对于静态方法和类方法,可以通过类名和实例两种方式进行调用。

访问控制

访问控制
Python中没有访问控制的关键字,例如private、protected等等。但是,在Python编码中,有一些约定来进行访问控制。
单下划线”_”
    在Python中,通过单下划线”_”来实现模块级别的私有化,一般约定以单下划线”_”开头的变量、函数为模块私有的

双下划线”__”

Java中的类方法

    Java 实例方法属于每个对象个体的方法
    Java中类变量也叫静态变量,也就是在变量前加了static 的变量

    调用--import
        类名.静态方法名
        new一个实例,然后实例调用方法
        继承的方法--直接调用
        模块名.函数名()

scala--中的类

    import a_trait
    extends a_trait--直接用
    apply---不用new一个对象,在构造样本类的对象时,可以略去new关键字,言简意赅,提高了代码的表达力。
    package object--对于包对象,import之后直接用


     包对象可以持有函数和变量-- 引入语句可以出现在任何位置,不限于文件顶部
     scala import引入语句可以引入包、类和对象

     引入包._ 
            包下的样例类直接调用,样例类--样例类有参数
            import org.apache.spark.sql.execution.command._
             DescribeFunctionCommand(functionName, EXTENDED != null)

二.管理大型程序中的名称--包

Java的包管理

包管理机制-
    分层管理
            不同的包
            同一个包,不同的主类中
            同一个主类,不同的的类,接口
            一个类中-----------------------内部类

复用类--类的调用
        利用现有类型生成新的类型--代码复用机制
                组合--
                继承--
                实现--    
    组合
            首先:import
            其次:
    继承
        extends
    实现
        implements
        一个java主类中引用另一个类的方法
                --静态类
类说明--静态变量和静态方法都属于静态对象
    静态变量的使用--static 
            import  <不同包或者类>
            直接用 类名.静态方法名  或者  类名.静态变量名就可引用
            不用使用new一个实例,然后实例调用方法或者变量
        
        方法

Scala的包管理

<1>
- Scala的单例对象Scala不能定义静态成员,而是代之定义单例对象(singleton object)。以object关键字定义

包可以包含类、对象和特质,但不能包含函数或变量的定义。
    很不幸,这是Java虚拟机的局限。把工具函数或常量添加到包而不是某个Utils对象,这是更加合理的做法。
包对象的出现正是为了解决这个局限。每个包都可以有一个包对象。你需要在父包中定义它,且名称与子包一样

Python模块及包的导入

Python的包管理
包下载    pip  install

导入:
        from + import来导入包中的部分模块
        整体模块导入
        包导入
 import 语句导入的模块共有以下四类: 
                    •使用Python写的程序( .py文件)
                    CC++扩展(已编译为共享库或DLL文件)
                    •包(包含多个模块)
                    •内建模块(使用C编写并已链接到Python解释器内)
Python的包搜索路径    
            Python会在以下路径中搜索它想要寻找的模块:
            1. 程序所在的文件夹
            2. 标准库的安装路径
            3. 操作系统环境变量PYTHONPATH所包含的路径

参考: python模块及包的导入 http://blog.csdn.net/zyz511919766/article/details/22678143

参考:

Scala学习(七)---包和引入 http://www.cnblogs.com/sunddenly/p/4436897.html
Scala样本类  http://www.jianshu.com/p/c374599ed0c4

blogroll

social