• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
宇之翼
Astrowings
博客园    首页    新随笔    联系   管理     

面向对象

类与对象

 

 


定义类:

class 类名:
    def 方法1(self):
        pass
    def 方法2(self):
     pass

  

根据类创建对象(创建一个类的实例) 使用对象去执行类中的方法

'self' 形式参数,代指执行方法的对象

封装:

class Foo:
    def __init__(self, name, age)     # 构造方法
        self.name = name     # 在创建对象时为对象设置数据 
        self.age = age    

obj = 类名()     # 创建一个类的实例

obj.name2 = 'zyu'     # 在obj中封闭一条数据 

继承:

1 class Dog(Animals) # Dog 继承Animals 的所有就去
2   pass     # Dog 派生类(子类) Animals 基类(父类)
3 
4 
5 class Dog(Animals, Unles)
6   pass     # python中可以继承多个父类,如果有方法相同,优先找自己的
7           # 父类的优先级从左到右

多态:
    python就是多态的,显式检查数据类型就会破坏多态.

运行父类的构造方法:
    1. super(当前类,self).__init__()
    2. 父类.__init__(self,XXX)

静态字段:
    将每个对象中都存在的字段放到类中,开始位置
    通过类名访问

静态方法:
    不需要使用对象封闭的字段,可定义要静态方法:

class Foo:
    @staticmethod  # 装饰静态方法
    def xxoo():
        pass 

类方法:
    和静态方法相同,但其必须有一个为类名的参数(系统自动传递)

class Foo:

    @classmethod    # 装饰类方法
    def xxoo(cls):      # 自动将类名传递给 cls

        print('xxoo', cls)

普通特性
    将类中普通方法伪造成字段可以访问字段的方式去访问
    注,获取时不能对其传参数, 需要设置其值时再建一个同名方法其可接收一个参数

class Foo:

    @property 
    def xxoo(self): # 获取特性
        return 52

    @xxoo.aetter
    def xxoo(self, value) # 设置字段,value 接收值
        print(value)    

    @xxoo.deleter   # 删除特性  
    def xxoo(self)
        print('deleter')    

Foo.xxoo    # 返回特性

Foo.xxoo = 'xx'   # 设置特性

del Foo.xxoo   # 删除特性

类的成员总结:
    字段:  普通字段, 静态字段

    方法:  普通方法, 静态方法(@staticmethod), 类方法(@classmethod)

    特性:  普通特性(获取无法传参 @property)  (设置可传参 @函数名.setter)  (删除特性  @函数名.deleter)

    快速判断:  有self的用对象访问,无self的用类访问

    通过类访问的有:  静态字段,   静态方法,   类方法

    通过对象访问的:   普通方法,    普通字段,    普通特性

类中特殊方法

 1 def __init__(self): # Foo() 类实例化对象时自动调用(构造方法)    
 2     pass
 3 
 4 
 5 def __del__(self): # 注销对象时调用(析构方法)    
 6     pass
 7 
 8 
 9 def __call__(self): # obj()或 Foo()() 对象加括号时自动调用    
10     pass
11 
12 
13 def __getitem__(self, item): # r['a'] d[1:3] __getslice__(2.7)
14     pass    # 对象加[]时自动调用
15 
16 
17 def __setitem__(self, key, value): # r['k1'] = 'ab' 赋值
18     pass # 对象加[]并赋值时自动调用
19 
20 
21 def __delitem__(self, key): # del r['k1'] 执行del时自动调用
22     pass
23 
24 
25 def __iter__(self): # 对可迭代对象迭代时自动执行(其是生成器)
26     pass
27 
28 
29 def __str__(self): # 对象被打印或执行str(obj)时自动调用
30     pass
31 
32 
33 def __dict__(self): # 类的描述信息,通过类调用返回类的所有成员
34     pass
35 
36 from lib.aa import C
37   obj = C()
38 print obj.__module__    # 表示当前操作的对象在那个模块, 输出 lib.aa,即:输出模块
39 print obj.__class__       # 表示当前操作的对象的类是什么, 输出 lib.aa.C,即:输出类

 

posted @ 2016-06-03 16:41  宇之翼  阅读(131)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3