不少人接触Python,都是从爬虫开始,其实不少语言均可以作爬虫,只是Python相对其余语言来讲,更加简单而已。可是Python并不止于爬虫,在人工智能,科学计算等方面的应用更加普遍。古人云:万丈高楼平地起,要想有长足的发展,打好基础很重要,本文主要讲解Python的面向对象相关知识,仅供学习分享使用,若有不足之处,还请指正。编程
以上是面向对象的基本特征,那么Python在面向对象方面是如何作的呢?ide
以下所示:函数
1 class Employee: 2 """员工类""" 3 emp_count = 0 # 变量是一个类变量,它的值将在这个类的全部实例之间共享 4 5 def __init__(self, name, salary): 6 """初始化""" 7 self.name = name 8 self.salary = salary 9 Employee.emp_count += 1 10 11 def display_count(self): 12 """显示数量""" 13 print('Total Employee =', Employee.emp_count) 14 15 def display_employee(self): 16 """显示信息""" 17 print('name =', self.name, ', salary = ', self.salary) 18 19 def prt(self): 20 """打印本身""" 21 print(self) 22 print(self.__class__) 23 24 def __del__(self): 25 """析构函数""" 26 print(self, '被释放了')
Python建立对象,不须要new关键字,相似于函数的调用,和Java及.Net不一样。以下所示:学习
1 '建立第一个对象' 2 emp = Employee('Jack', 20) 3 emp.display_count() 4 emp.display_employee() 5 emp.prt()
对象的属性能够动态添加,这点与编译型语言不一样,以下所示:人工智能
1 emp.age = 17 # 添加一个 'age' 属性 2 emp.age = 28 # 修改 'age' 属性 3 del emp.age # 删除 'age' 属性
也能够经过Python的内置方法来添加和获取属性,以下所示:spa
1 print(getattr(emp, 'name')) # 获取属性 2 print(hasattr(emp, 'age')) # 是否包含属性 3 setattr(emp, 'age', 18) # 设置属性和值 4 print(hasattr(emp, 'age')) # 是否包含属性 5 print(getattr(emp, 'age')) # 获取属性 6 delattr(emp, 'age') # 删除属性 7 print(hasattr(emp, 'age')) # 是否包含属性
Python也有内置类的一些属性,以下所示:code
1 # 内置对象 2 print("Employee.__doc__:", Employee.__doc__) 3 print("Employee.__name__:", Employee.__name__) 4 print("Employee.__module__:", Employee.__module__) 5 print("Employee.__bases__:", Employee.__bases__) 6 print("Employee.__dict__:", Employee.__dict__)
以下所示:对象
1 class JustCounter: 2 """类描述""" 3 __secretCount = 0 # 类的私有变量 4 publicCount = 0 # 公开变量 5 6 def count(self): 7 self.__secretCount += 1 8 self.publicCount += 1 9 print('私有变量:', self.__secretCount)
Python不容许实例化的类访问私有数据,但你能够使用 object._className__attrName( 对象名._类名__私有属性名 )访问属性,以下所示:
blog
1 print(counter._JustCounter__secretCount)
面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是经过继承机制。经过继承建立的新类称为子类或派生类,被继承的类称为基类、父类或超类。继承
以下所示:Parent表示一个父类,拥有本身的属性和方法。
1 class Parent: 2 """定义父类""" 3 parentAttr = 100 4 5 def __init__(self): 6 print('调用父类的构造函数') 7 8 def parentMethod(self): 9 print('调用父类方法') 10 11 def setAttr(self, attr): 12 Parent.parentAttr = attr 13 14 def getAttr(self): 15 print('父类属性:', Parent.parentAttr) 16 17 def myMethod(self): 18 print('我是父类的MyMethod')
Child表示一个子类,继承自Parent,以下所示:
1 class Child(Parent): 2 """定义子类""" 3 4 def __init__(self): 5 print('调用子类的构造方法') 6 7 def childMethod(self): 8 print('调用子类方法') 9 10 def myMethod(self): 11 """重写Overrides父类方法""" 12 print('我是子类的MyMethod') 13 14 def __str__(self): 15 """重写方法,适合人阅读""" 16 return 'str方法返回'
以下所示:
1 c = Child() # 实例化子类对象 2 c.childMethod() # 调用子类方法 3 c.parentMethod() # 调用父类方法 4 c.setAttr(200) # 再次调用父类方法,设置属性 5 c.getAttr() # 再次调用父类方法 获取属性 6 c.myMethod() # 调用的是子类的MyMethod
能够经过内置函数,判断子类与类的关系,以下所示:
1 print(issubclass(Child, Parent)) # 判断是不是对应的父子关系 2 print(isinstance(c, Child)) # 判断是不是实例对象 3 print(isinstance(c, Parent)) # 判断是不是实例对象
天净沙·秋思