现在的编程语言基本分为三种,第一类是面向机器的语言,代表的就是汇编,保留了机器语言的外形,即由操作码和地址码组成指令这个外形;第二类就是面向过程的语言,代表的就是C语言,结构化程序设计语言,是高级语言的一种。在面向过程程序设计中,问题被看作一系列需要完成的任务,函数则用于完成这些任务,解决问题的焦点集中于函数;第三类就是面向对象的语言,代表的就是C++、python、Java,是一类以对象作为基本程序结构单位的程序设计语言,指用于描述的设计是以对象为核心,而对象是程序运行时刻的基本成分。语言中提供了类、继承等成分,有识认性、多态性、类别性和继承性四个主要特点!
其中python应该是比较简单的面向对象的语言了,下面就简单写一下个人的学习过程!
类和实例
类(class)和实例(instance)是重要的概念,类可以抽象出一个个的对象,由对象衍生一些百花缭乱的方法(注:在面向对象语言中称方法,面向过程中叫做函数,其实也已经淡化了,无-所-谓,但是显得牛),python用class定义一个类,后面一般加上 (object) ,如果定义的类是由继承而来,此时需要将object换成继承的父类,如果此类非继承而来,可不写!
class Student(object): #定义的类首字母大写。记得加冒号
def __init__(self,age,name): #当我们创建实例的时候可能需要绑定一些属性,此时需要__init__方法,此方法的第一个参数一定是self,表示实例其本身,其中的age,name是实例属性
self.name = name #这句话的意思比较多,self是创建的实例本身,好似Java中的this,self.name是一个类属性,就是将外部name的值赋给类属性,从而调用!
self.age = age
s = Student('xmc',24) #类的实例化,当定义了__init__时,需要加上初始化的值
print(s.name) #xmc
print(s.age) #24
- 访问限制
python有类属性和实例属性,其实还有一个比较常用的私有属性,当然了,私有属性并不意味着不可以访问,只是告诉别人我是私有的,受保护的,不要随便访问和修改!!!下面看代码.
class Student(object): #所有的类都是由object类继承而来,所以可以这样写
def __init__(self,name,age):
self.__name = name #在实例的变量前面加上 __ 表示变为了私有变量,不可以在外部访问了,更加不能够修改!
self.__age = age
#当然了,python提供了一系列的访问以及修改私有变量的值的函数,访问(get_name),修改(set.age)
def get_name(self):
return self.__name
def get_age(self):
return self.__age
def set_name(self,name):
self.__name = name
def set_age(self,age):
self._age = age
s = Student('xmc',24)
print(s.get_name()) #xmc
s.set_name('xu')
print(s.get_name()) #xu
print(s._Person__name) # xu能直接访问__name是因为Python解释器对外把__name变量改成了_Student__name,所以,仍然可以通过_Person__name来访问__name变量
- 继承和多态
类的继承和多态在面向对象的语言中最为常见和使用!继承的类称为子类,被继承的类成为父类,超类或者基类!还是看代码吧!
class Animal(object):
def bark(self):
print('I am animal')
class Dog(Animal):
def bark(self):
print('I am dog')
class Cat(Animal):
def bark(self):
print('I am cat')
animal = Animal() #类的实例化
animal.bark() #调用bark
dog = Dog()
dog.bark()
cat = Cat()
cat.bark()
pirnt(isinstance(animal,Animal)) # True isinstance是一个判断变量是否匹配一个类型的方法
print(isinstance(cat,Animal)) #True 因为Cat类是由Animal类继承而来的,所以说cat属于Animal类型的没有任何错误!
def run(x):
x.bark()
run(Animal()) #I am Animal
实例属性和类属性
由于python语言的动态性,所以类的实例可以任意绑定属性!一般来说,实例属性是由实例变量绑定或者由self来绑定!至于类属性,相当于C语言中的全局变量,在方法之外绑定!但是实例属性的优先级高于类属性!
class Student(object):
x = 'xmc' #类属性
def __init__(self,name): #name是实例属性
self.name = name
s = Student('xu') #类的实例化
print(s.x) #xmc 打印x属性,但是实例并没有x属性,所以继续查找得到类属性
print(s.name) #xu
print(Student.x) #xmc 直接打印类属性
s.x = '66'
print(s.x) #66
print (Student.x) #xmc 虽然实例属性已经修改了,但是类属性并没有改变,所以类属性中的X仍然还是 xmc!
进一步的面向对象晚点奉上!!!