简介
根据操作数据的函数或语句块来设计程序,被称为面向过程的编程。
把数据和功能结合起来,用称为对象的东西包裹起来组织程序的方法称为面向对象的编程。
类和对象是面向对象编程的两个主要方面。类创建一个新类型,而对象是这个类的实例 。
属于一个对象或类的变量被称为域。对象也可以使用属于类的函数来具有功能。这样的函数被称为类的方法。域和方法可以合称为类的属性。
类使用class关键字创建。类的域和方法被列在一个缩进块中。
self
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候Python会提供这个值。这个特别的变量指对象本身,名称是self。
class Person:
def __init__(self,name):
self.name = name
print('my name is ', 'self.name')
def saySth(self):
print('hello')
p = Person('edwin')
p.saySth()
# 结果
my name is edwin
hello
saySth方法没有任何参数,但仍然在函数定义时有self。
__init__方法
在Python的类中有很多方法的名字有特殊的重要意义。__init__方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的初始化。注意,这个名称的开始和结尾都是双下划线。
上例中,我们没有调用init方法,但其输出中仍有 'name name is'。
区分类与对象的变量
类的变量和对象的变量只在这些类与对象的前提下有效。
class haveNum:
num = 0
def __init__(self,num):
self.num = num
num1 = haveNum(1)
num2 = haveNum(2)
# 结果
num1.num
Out: 1
num2.num
Out: 2
haveNum.num
Out: 0
继承
面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制,通过继承形成父类子类关系。
class Person:
"""Represents any school member"""
def __init__(self,name,age):
self.name = name
self.age = age
print(name,age)
def saySth(self):
print('person')
class Teacher(Person):
def __init__(self,name,age,salary):
Person.__init__(self,name,age)
self.salary = salary
print(name,age,salary)
class Student(Person):
def __init__(self,name,age,score):
Person.__init__(self,name,age)
self.score = score
print(name,age,score)
teacher = Teacher('MR',40,20000)
student = Student('edwin',20,90)
teacher.saySth()
student.saySth()
# 结果
MR 40
MR 40 20000
edwin 20
edwin 20 90
person
person
Python不会自动调用基本类的constructor,你得亲自专门调用它。