Python - OOP

主要记录和 Java 相比的不同之处。

创建类

class Employee:
   'employee class'
   empCount = 0
   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   def displayCount(self):
      print "Total Employee %d" % Employee.empCount
   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary

__init__() 方法是类的构造函数或初始化方法,当创建这个类的实例时会调用该方法。

类的方法与普通的函数只有一个特别的区别:它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。

self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。

创建实例对象

不需要使用 new 关键字。

emp1 = Employee("Zara", 2000)

访问属性

可以使用以下函数的方式来访问属性:

getattr(emp1, 'age')    # 返回 'age' 属性的值
setattr(emp1, 'age', 8) # 添加属性 'age' 值为 8

类的内置属性

GC

回收不是立即的, 由解释器在适当的时机,将垃圾对象占用的内存空间回收。

继承

可以多重继承

class C(A, B):   # 继承类 A 和 B

类属性与方法

私有属性/方法:__private_something,两个下划线开头,声明该属性为 private ,不能在类的外部被使用或直接访问。 只可以在类内部的方法中使用时 self.__private_something

保护型变量:_protected_something,单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问, 不能用于 from module import *

导入

例子

import math 
print(math.pi) 

__init.py__

绝对导入:import moduleA.moduleB

相对导入:from .moduleX import functionX (.表示当前目录)

为了避免import的问题,记住两个原则:

注:from package import item 方式导入包时,这个子项(item)既可以是包中的一个子模块(或一个子包),也可以是包中定义的其它命名,像函数、类或变量。 相反,使用类似 import item.subitem.subsubitem 这样的语法时,这些子项必须是包,最后的子项可以是包或模块,但不能是前面子项中定义的类、函数或变量。

环境

查看python和pip的版本

python --version
pip --version

使用Pipenv, Pipenv will install the library and create a Pipfile for you in your project’s directory.

pip install --user pipenv
$ cd project_folder
$ pipenv install [module_name]
$ pipenv run python main.py

使用virtualenv, virtualenv is a tool to create isolated Python environments. virtualenv creates a folder which contains all the necessary executables to use the packages that a Python project would need.

$ pip install virtualenv
$ cd project_folder
$ virtualenv venv
source venv/bin/activate
$ deactivate
Fork me on GitHub