python面向对象(一)

现在的编程语言基本分为三种,第一类是面向机器的语言,代表的就是汇编,保留了机器语言的外形,即由操作码和地址码组成指令这个外形;第二类就是面向过程的语言,代表的就是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!

进一步的面向对象晚点奉上!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章