码迷,mamicode.com
首页 > 编程语言 > 详细

python 面向对象

时间:2018-05-19 14:45:15      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:创建   运行   @class   col   .com   子类   tin   icm   src   

   属性

          实例变量:   __init__需要初始化的变量,实例变量作用域就是实例本身
          类变量:      写在class全局的变量
          私有属性 ,如下:这样的话通过实例无法调用这个属性 。
           技术分享图片技术分享图片

          当要访问私有属性的时候,可以新建一个方法,内部方法是可以调用私有属性的,然后通过调用这个方法来获取私有属性的值:

          技术分享图片

          print(r1.show_status())

 

          如果实例调用变量,实例变量和类变量都定义了相同变量,那么优先去实例变量,没有再找类变量。 

          技术分享图片

 

    方法       

          构造方法:
                def  __init__(self):
                       self.name = name
          析构函数,在实例释放(删除实例del 或者实例运行结束),销毁的时候自动执行的,通常做一些收尾工作。如:关闭一些数据库链接,关闭打开的临时文件
                def  __del__(self):
                       do something
 
          私有方法,定义普通方法的时候前面加两个下划线 
 

对象

       实例化一个类之后得到的对象
 

封装

      把一些功能的实现细节不对外暴露
      第一个层面的封装(什么都不用做):创建类和对象会分别创建二者的名称空间,我们只能用类名.或者obj.的方式去访问里面的名字,这本身就是一种封装。
      第二个层面的封装:类中把某些属性和方法隐藏起来(或者说定义成私有的),只在类的内部使用、外部无法访问,或者留下少量接口(函数)供外部访问。 
 

继承

      代码重用
      单继承
      多继承
                 2.7经典类(class People()),深度优先,新式类(class People(object)),广度优先
                 3.x广度优先 
      技术分享图片
 
 
 继承例子:
class Peolpe():

    def __init__(self,name,age):
        self.name = name
        self.age = age

    def talk(self):
        print("%s is talking..."%self.name)

    def sleep(self):
        print("%s is sleeping..."%self.name)

class Man(Peolpe): ##此处继承
    pass

m1 = Man("liyang",22)
m1.sleep()

       

继承重用

class Peolpe():
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def talk(self):
        print("%s is talking..."%self.name)
    def sleep(self):
        print("%s is sleeping..."%self.name)

class Man(Peolpe): ##此处继承
    def eat(self):
        print("%s is eating"%self.name)
    def sleep(self):
        Peolpe.sleep(self) ##此处调用父类方法,如果没有这行,sleep方法会重写,不会执行父类方法
        print("man also is sleeping")

m1 = Man("liyang",22)
m1.sleep()

 

如果子类要新增初始化参数呢,要修改一下子类

class Man(People): ##此处继承
    def __init__(self,name,age,location):
        People.__init__(self,name,age) ##继承父类初始化参数
        self.location = location  ##新加一个参数

或者

class Man(People): ##此处继承
    def __init__(self,name,age,location):
        #People.__init__(self,name,age) ##继承父类初始化参数
        super(Man,self).__init__(name,age)  ##使用super内置函数,新式写法
        self.location = location  ##新加一个参数

 

多继承:

# -*- coding:utf-8 -*-
# Author:Brownyangyang

class People():
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def talk(self):
        print("%s is talking..."%self.name)
    def sleep(self):
        print("%s is sleeping..."%self.name)

class Relation(object):
    def make_friends(self,obj):
        print("%s is makeing friends with %s"%(self.name,obj.name))
        ##self.name是People那边继承过来的,obj 是定义的一个实例

class Man(People,Relation): ##此处继承
    def __init__(self,name,age,location):
        #People.__init__(self,name,age) ##继承父类初始化参数
        super(Man,self).__init__(name,age)
        self.location = location  ##新加一个参数

    def eat(self):
        print("%s is eating"%self.name)
    def sleep(self):
        People.sleep(self) ##此处调用父类方法,如果没有这行,sleep方法会重写,不会执行父类方法
        print("man also is sleeping in %s"%self.location)

class Woman(People,Relation):
    def get_birth(self):
        print("%s is borning the baby"%self.name)

m1 = Man("xiaohong",22,"nantong")
# m1.sleep()

w1 = Woman("xiaoming",32)
# w1.get_birth()
m1.make_friends(w1)

结果:xiaohong is makeing friends with xiaoming

 

多态

        接口重用,一种接口多次实现 
 
 

方法修饰

 
静态方法 @staticmethod 
       只是名义上归类管,实际上跟类没什么关系了,实际上在静态方法里访问不了类或实例中的任何属性
 
类方法@classmethod
       只能访问类变量,不能访问实例变量
 
属性方法@property
      把一个方法变成一个静态属性 
 
 
 
 
 

          

python 面向对象

标签:创建   运行   @class   col   .com   子类   tin   icm   src   

原文地址:https://www.cnblogs.com/brownyangyang/p/9060207.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!