zoukankan      html  css  js  c++  java
  • 【Python】Java程序员学习Python(十)— 类、包和模块

      我觉得学习到现在应该得掌握Python的OOP编程了,但是现在还没有应用到,先留一个坑。

    一、类和对象

      说到类和对象其实就是在说面向对象编程,学完Java以后我觉得面向对象编程还是很不错的,首先封装了实现,当然实现的具体代码还是一行一行写的,但是只要代码封装的足够好,写一遍就可以应用到所有的地方,而类则是一组相关方法的集合。

    1.1 类的创建和实例化

      类的创建使用关键字class,而类的实例化则直接是类名()即可:

    class Test:
        def __init__(self):
            print('init a class')
        def test(self):
            print(self)
    
    test=Test()
    test.test()
    ========控制台输出========
    init a class
    <__main__.Test object at 0x0000021E9915A4A8>

      以上就是一个类定义和初始化的例子:

    • 类定义 class className:,className后面可以带括号,也可以省略,带括号是为了继承,下面讲到。
    • __init__:这个方法会在类实例化的时候执行一次, 初始化代码可放在这里,也可以定义参数,在创建对象的时候传入,但是__init__方法只能有一个。
    • self:所有实例调用方法的时候,内部都会首先传入一个self参数,就是对应着方法的self(名字可以随意定,但是最好还是符合规范使用self),这个就相当于java类中的this关键字。
    • 一个脚本中可以创建多个类,不过建议不要创建多个,当然若它们之间有很强的关联性也是可以的。
    • 类是模块内的属性

      其实我觉得Python对self的使用太不友好,应该学学java,最好是定义方法的时候不用指明并将self设置为关键字。

    1.2 类的继承

      就像上面说过的那样,定义类的时候可以带括号,里面放要继承的类,简单例子如下:

    class Animal():
        def say(self):
            print('animal say')
    class Dog(Animal):    
        def say(self):
            print('dog say')

      和Java相似,支持方法重写,当然也具有多态的特性,其他还要注意的是:

    • 可以实现多继承,class DerivedClassName(Base1, Base2, Base3):,当调用子类没有的方法的时候会按顺序搜索父类。

    1.3 类的属性和方法

      Python中类中属性和方法的访问权限只有两种,公开和私有,但是没有权限标识符来定义,而是在私有的属性或者方法名前加两个下划线来表示:

    class Dog():    
        __name='lit'
        def __say(self):
            print('dog say')

      用起来还算方便,内部使用时正常。当然类中还有一些默认的方法,就像上面介绍的__init__方法一样,可以对其进行重写,其他的方法还有:

    • __init__ : 构造函数,在生成对象时调用,这个方法会经常用到
    • __del__ : 析构函数,释放对象时使用
    • __repr__ : 打印,转换,这个方法就是Java的toString()方法,用来描述对象的
    • __setitem__ : 按照索引赋值
    • __getitem__: 按照索引获取值
    • __len__: 获得长度
    • __cmp__: 比较运算
    • __call__: 函数调用
    • __add__: 加运算
    • __sub__: 减运算
    • __mul__: 乘运算
    • __div__: 除运算
    • __mod__: 求余运算
    • __pow__: 称方

      除了上面说的两个方法__init__和__repr__外,其他的多是运算符重载,都不常用,了解即可,下面简单介绍一下。

    1.4 运算符重载

      这个简单来说是将运算符应用于对象之间,算是Java没有的一个特性,不过Java中的字符串可以使用+来连接,算是一个特例吧,下面举一个简单的例子:

    class People:
        def __init__(self,name):
            self.name=name
        def __add__(self,other):
            return self.name+' with '+other.name
    people1=People('yiwangzhibujian')
    people2=People('laizhezhikezhui')
    print(people1+people2)
    ======控制台输出======
    yiwangzhibujian with laizhezhikezhui

      如果没有定义+的方法__add__话,两个对象相加还是会报错的,这样重载运算符以后可以对两个对象进行草在。

    二、包

      包的出现主要还是为了解决命名冲突问题,毕竟有效的名字就那么多,如果没有指定具体的包的话是很容易重复的。当然包实质上就是文件夹而已。

      在Python中,一个合格的包下面必须有一个名为__init__.py,的脚本,这个脚本的内容会在引入当前包的时候执行,同一个项目多次引用只会执行一次。

  • 相关阅读:
    UVa 1151 Buy or Build【最小生成树】
    UVa 216 Getting in Line【枚举排列】
    UVa 729 The Hamming Distance Problem【枚举排列】
    HDU 5214 Movie【贪心】
    HDU 5223 GCD
    POJ 1144 Network【割顶】
    UVa 11025 The broken pedometer【枚举子集】
    HDU 2515 Yanghee 的算术【找规律】
    Java基本语法
    Java环境变量,jdk和jre的区别,面向对象语言编程
  • 原文地址:https://www.cnblogs.com/yiwangzhibujian/p/6985879.html
Copyright © 2011-2022 走看看