Python中的类class

来源:互联网 发布:软件随想录读后感 编辑:程序博客网 时间:2024/05/18 00:47

class的基本定义

    class test(object):        a = 1        def func_1(self):            return self.arg1,self.arg2        def __init__(self,arg1,arg2):   #构造函数            self.arg1 = arg1            #将参数引用到类的内部            self.arg2 = arg2        def __del__(self):              #析构函数            del self.arg1            del self.arg2

注:
1. a 被称为类test的属性
2. func_1 被称为类test的方法
3. 所有的class都是object的派生类

基本继承:一个子类可以继承它的基类任何属性

    class Base(object):        def __init__(self,name):            self.name = name    class b(Base):     #这是python中继承的方法        def get_name(self):            return self.name    new_class = b (‘lilei’)    print new_class.get_name()

注意:子类重写__init__不会自动调用基类的__init__:与java不同

类的特殊属性:

对于任何类C,C具有六个特殊属性:

C.__name__          类的名字(字符串); C.__doc__       类的文档字符串(不能继承);C.__bases__         类C的所有父类构成的元组C.__dict__      类C的属性(字典)C.__module__        类C定义所在的模块C.__class__         实例C所对应的类(用的较少,只在新式类中)

对于实例属性c = C()具有两个特殊属性:

c.__class__     实例c的类c.__dict__      c的属性

从实例中访问类属性需谨慎: 给一个与类属性同名的实例属性赋值,我们会“隐藏”类属性。即实例对于属性进行的修改只位于实例中,类中的同名属性不会改变。但是类属性的修改会影响到所有实例。

    class Foo(object):        x = 1.5    foo = Foo()    foo.x                   #值为1.5    foo.x = 1.7             #或者foo.x += 0.2    Foo.x                   #值仍为1.5

静态方法和类方法

静态方法:不需实例化,可以直接用类名调用的方法。
类方法:可以通过类或它的实例来调用的方法。不管你是用类来调用这个方法还是类实例调用这个方法,该方法的第一个参数总是定义该方法的类对象。

staticmethod() 创建静态方法,不需要self作为第一个参数  @staticmethodclassmethod()  创建类方法,很多人使用cls作为变量名。   @classmethod
    class TestStaticMethod:        def foo():            print ‘hahaha'        foo = staticmethod(foo)   #如果没有这个内建函数,会报错,因为没有self参数    class TestClassMethod:        def foo(cls):            print ‘hehehe'        foo = classmethod(foo)        #同上    ##现在可以用函数修饰符代替上面的方式(推荐):    class TestStaticMethod:        @staticmethod        def foo():            print ‘hahaha'    class TestClassMethod:        @classmethod        def foo(cls):            print ‘hehehe'

私有化

python属性默认是公开的。使用访问控制符来限定成员函数的访问,将对象数据隐藏,实现封装。
1. 双下划线(__) :由双下划线开始的属性在运行时不能直接访问。
2. 单下划线(_):简单的模块级私有化只需在属性(或函数)名前使用单下划线字符,阻止模块属性用import来加载。

用特殊方法定制类

特殊方法允许类通过重载标准操作符来模拟标准类型,这些方法都是以双下划线开始及结尾的。
1. 模拟标准类型
2. 重载操作符

__add__(self,obj)方法    重载 +                         __iadd__()方法      重载+=__sub__()方法    重载  -                                     __mul__()方法      重载 *__div__()方法      重载/

使用对象内置的方法

绑定:方法只有在其所属类拥有实例的时候才能被调用,
非绑定:在子类构造器__init__()中调用覆盖的父类__init__()方法中使用(__del__()同)
1. 实例化这个class (test) t = test()
2. 使用 class.method()的方式去调用 class 的内置方法。
注意:当定义一个class的内置方法method时,method的参数的第一个永远是self。

一些有用的内建函数

  1. issubclass(sub,sup) :判断一个类是否是另一个类的子类,返回布尔值
  2. isinstance(obj1,obj2):判定一个对象是否是另一个给定类的实例,返回布尔值。
  3. *attr()系列函数可以在各种对象下工作

    hasattr(obj,’attr’)  :判断一个对象是否具有特定的属性,返回布尔值  gettattr(obj,’attr’):取得相应属性的值。setattr()   delattr()
  4. super():帮助找出相应的父类,然后方便调用相关属性。super(MyClass,self).__init__()
0 0
原创粉丝点击