python面向对象编程和类

一、面向对象编程

面向对象--Object Oriented Programming,简称oop,是一种程序设计思想。把一些公用的函数封装到一个类里面。

二、类

属性:属性就是类里面的一个变量,有类变量和实例变量,类变量是类在定义的时候就有的,实例变量是在实例化的时候才产生的变量。

方法:方法就是类的功能,也就是定义在类里面的函数。

构造函数:类被实例化的时候,它会自动的执行构造函数,做的某些初始化操作。

析构函数:析构函数是实例在销毁的时候做的一些操作。

定义类:定义类使用class关键字,类名一般我们开发的时候首字母要大写。python中有经典类和新式类。

继承:父类有的功能、变量子类全有。如果定义的类,有很多重复功能的,那就可以把这些重复的类,定义成父类

多态:python里面是不直接支持多态的,可以通过别的方法来实现多态。

私有方法、私有属性:什么是私有,私有就是只有在类里面可以访问,实例化之后不可以访问和调用,有私有方法和私有属性。私有就把变量名或者函数名前面加上"__"两个下划线,其实就是通过私有来实现封装的。

类方法:不需要实例化就能直接用的,它可以使用类变量和类方法。类方法,也不需要实例化,直接就能用。它静态方法高级一点,它可以使用类变量和类方法。
静态方法:不需要实例化就能直接用的,其实和类没有什么关系,就是一个普通的函数,写在了类里面而已,也用不了self的那些东西,也调用不类里面的其他函数。

示例:

类定义

    class Person(object):#定义类,这个是新式类
                    nationality 'China' #类属性
                    def __init__(self,name,sex)#构造函数
                            self.name name #实例属性
                            self.sex =sex
                    def __del__(self):#析构函数
                        print('这个是析构函数')
                    def info():#方法
                           print('name is %s sex is %s '%(self.name,self.sex))
                    
            class Person1:#定义类,这个是经典类
                    nationality 'China' #类属性
                    def __init__(self,name,sex)#构造函数
                            self.name name #实例属性
                            self.sex =sex
                    def info():#方法
                           print('name is %s sex is %s '%(self.name,self.sex))
                     
            niuniu Person('牛牛','男'#实例化,因为在上面的构造函数里面指定了必须传name和sex,所以在实例化的时候要把name和sex传进去
            niuniu.info()#调用实例方法
 
继承
     class F(object):
                    '''
                    这个是父类
                    '''
                    def __init__(self,name,sex):
                        self.name name
                        self.sex sex
                    def info():#方法
                        print('name is %s sex is %s '%(self.name,self.sex))
                class S(F):#继承F这个类
                    pass
                s1 S('牛牛','男')#实例化子类
                s1.info()#因为继承父类,所以父类的方法他都有
                那如果在父类里面有一个方法,子类里面也有的话,但是子类想重写一下父类的方法,增加新功能下面这么写:
                class test():
                    def __init__(self,name):
                        self.name name
                class test1(test):
                    def __init__(self,name,age):
                        # test.__init__(self,name)#修改父类的方法,这个是经典类里面的写法
                        super(test1,self).__init__(name)#和上面的效果一样,这个是新式类里面的写法
                        self.name name
                        self.age age
                test1('name','age')
                多继承,上面写的都是单继承的,python里面还支持多继承,多继承就是继承多个父类,在python3中多继承都是广度优先的,在python2中有点不同,经典类是深度优先,新式类是广度优先。
                class A:
                    def say(self):
                        print('A')
                class B(A):
                    # pass
                    def say(self):
                        print('B')
                class C(A):
                    pass
                    # def say(self):
                    #     print('c')
                class D(C,B):
                    pass
                s=D()
                s.say()
 
私有方法、私有属性
    class Dog(object):
                    __type '狗'#私有属性
                    def cry(self):
                        self.__test()#调用私有方法
                        print('私有属性%s'%self.__type)
                        print('狗 [%s] 汪汪汪'%self.name)
                    def __test(self):#私有方法
                        self.name 'test'#
                D()
                d.cry()#正常可以调用
                d.__type#报错,因为是私有属性,在外面不能访问
                d.__test()#报错,因为是私有方法,在外面不能访问
 
静态方法和类方法
        class Stu(object):
            country 'china'#类变量
            def __init__(self,name):
                self.name name
            @staticmethod
            #静态方法,和类本身没有什么关系了,就相当于在类里面定义了一个方法而已
            def say():
                print('xxx')
            @classmethod
            #静态方法,和类方法不同的是,它可以使用类变量,必须要传一个值,代表的就是这个类
            def hello(cls):
                 print(cls.country)
            def hi(self):
                #这个是实例方法
                print(self.name)
        Stu('name')
        Stu.hello()
        Stu.say()
        t.hi()
        t.say()
        t.hello()
 
重写父类
       
import redis
class Coon(object):
#基类
def __init__(self,host,passwd,port):
self.host= host
self.passwd=passwd
self.port= port

class CoonMySql(Coon):
def __init__(self,host,passwd,port,username,db,charset='utf8'):
#Coon.__init__(self,host,passwd,port) #z在调用父类的构造方法,咱们自己手动调用父类的方法
super(CoonMySql,self).__init__(host,passwd,port) #super会自动找到父类,然后调用下面的方法
self.username=username
self.db=db
self.charset=charset
def coon_mysql(self):
print(self.host,self.host)

class CoonRedis(Coon):
def conn(self,host,passwd,port):
Coon.conn(self, host, passwd, port)
redis.Redis(host=self.host,password=self.passwd,port=self.port)
 
 
 
posted @ 2018-03-02 14:36  Crish  阅读(170)  评论(1编辑  收藏  举报