python中的面向对象

来源:互联网 发布:dd是什么意思网络用语 编辑:程序博客网 时间:2024/06/05 20:29

一. 定义类
经典类:如果没有直接或间接的子类化一个对象,也就是说如果没有指定一个父类,或者是如果子类化的基本类没有父类,那么就定义了经典类:

class A:    pass

新式类:如果你的类没有继承任何父类,object将作为默认的父类

class B(object):    pass

Python 2.x中默认都是经典类,只有显式继承了object才是新式类
Python 3.x中默认都是新式类,不必显式的继承object
二. 定义类的属性
1.1 直接在类里定义

class A(object):    a=100

在不做修改的情况下,所以这个类的对象的属性都是一样的
1.2 在构造函数里定义

class A(object):    def __init__(self,a):        self.a=100

构造对象时把一些属性的值传进去,不同的对象可以有不同的属性
2.访问控制
python没有访问控制,没有提供私有属性的功能,在日常编程中通过一些编程规范和命名规则进行约束
前面加_表示私有属性(只是一种编程规范,不是python语法的功能,仍然可以访问到)
前面加__变相实现了部分私有属性的访问

class Programer(object):     def__init__(self,weight):        self.__weight=weight    def get_weight(self):           return self.__weightif __name__=='__main__':    p=Programer(80)    print(p.get_weight())    print(p._Programer__weight)#80#80

三. 定义类的方法
方法包括:普通方法、静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同。
普通方法:由对象调用;至少一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self
类方法:由类调用; 至少一个cls参数;执行类方法时,自动将调用该方法的类复制给cls
静态方法:由类调用;无默认参数

class Foo:    def __init__(self, name):        self.name = name    def ord_func(self):        """ 定义普通方法,至少有一个self参数 """        # print self.name        print '普通方法'    @classmethod    #类方法的装饰器    def class_func(cls):        """ 定义类方法,至少有一个cls参数 """        print '类方法'    @staticmethod   #静态方法的装饰器    def static_func():        """ 定义静态方法 ,无默认参数"""        print '静态方法'# 调用普通方法,对象名调用f = Foo()f.ord_func()# 调用类方法,类名调用Foo.class_func()   # 调用静态方法,类名调用Foo.static_func()

四. 类的继承
继承的子类会继承父类的所有属性,也可以自己定义,覆盖父类的属性和方法
对于面向对象的继承来说,其实就是将多个类共有的方法提取到父类中,子类仅需继承父类而不必一一实现每个方法
class 类名(要继承的类):
如果不继承类,则继承object类,object类是所有类的父类

调用父类的方法:
super(自己的类名,self).相应的方法名

多继承:
1、Python的类可以继承多个类,Java和C#中则只能继承一个类
2、Python的类如果继承了多个类,那么其寻找方法的方式有两种,分别是:深度优先和广度优先
当类是经典类时,多继承情况下,会按照深度优先方式查找
当类是新式类时,多继承情况下,会按照广度优先方式查找

0 0
原创粉丝点击