面向对象编程(六)

 

类有3种方法:

  • 类方法    (@classmethod)         # 只能调用类里的属性(私有属性,公有属性等),不能调用外问的传参,可以直接调用而无需实例化
  • 静态方法  (@staticmethod)        # 归属于类,不能调用类里的任何属性、方法,可以从外部传参,只是类下面的一个方法,可以直接调用而无需实例化
  • 属性方法  (@property)          # 把一个类方法变成一个静态属性
class Dog(object):

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

    @property
    def eat(self):
        print(" %s is eating" % self.name)

d = Dog("Xia0")
d.eat  # 与调用类的静态属性方法一样,不能加括号
print(d.name)

 

类的特性:

  • 封装
  • 继承
  • 多态

 

类方法

@classmethod

可以无需实例化直接调用

静态方法

@staticmethod

class Dog(object):
    """小狗的类"""
    name = '123'

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

    # 静态方法  只是归类管理的一个函数方法,不能访问类里面的任何属性,可以从外部传参
    @staticmethod
    def eat(name):
        print('%s eating food' % name)

    def my(self):
        print('dog is %s' % self.name)

    # 类方法 只能访问类内部的公有属性,无法访问外部,也无法从外部传参
    @classmethod
    def walk(cls):
        print('%s walk' % cls.name)

    # print实例化后的对象,直接返回return的值
    def __str__(self):
        return self.name


d = Dog('小狗')
d.eat('aaa')
d.my()
d.walk()

# 打印类的描述信息,创建类时最好加上描述
print(Dog.__doc__)
# print实例化后的对象,直接返回return的值 __str__
print(d)
--------------------------------------------------------
# 结果:
aaa eating food
dog is 小狗
123 walk
小狗的类
小狗

  

  

__getitem__  __setitem__  __delitem__ 用法 

可进行对字典的操作,

__getitem__   获取key的值

__setitem__   设置key,values

__delitem__  删除key,values

# __getitem__  __setitem__  __delitem__

class Foo(object):
    """用于测试 __getitem__ __setitem__ __delitem__"""

    def __getitem__(self, item):
        print('__getitem__', item)

    def __setitem__(self, key, value):
        print('__setitem__', key, value)

    def __delitem__(self, key):
        print('__delitem__', key)

# 实例化
obj = Foo()
# 获取    自动触发 __getitem__ 方法
dic = obj['1']
# 设置    自动触发 __setitem__ 方法
obj['222'] = 'test'
# 删除
del obj['222']

  

经典类与新式类

 

当类是经典类时,多继承情况下,会按照深度优先方式查找

当类是新式类时,多继承情况下,会按照广度优先方式查找

  • 经典类深度优先
  • 新式类广度优先

简单点说就是:经典类是纵向查找,新式类是横向查找

 

super的用法

#新式类
class A(object):
    def __init__(self):
	    print('A')

class B(A):
    def __init__(self):
	    super(B, self).__init__()  # 继承A类
		print('B')

class C(B,A):
    def __init__(self):
	    super(C,self).__init__()   # 这样只会调用父类A一次
		print('C')

  

 

类的特殊成员方法

  • __doc__  表示类的描述信息
  • __module__ 表示当前操作的对象在那个模块
  • __class__ 表示当前操作的对象的类是什么
  • __init__ 构造方法,通过类创建对象时,自动触发执行
  • __del__ 析构方法,当对象在内存中被释放时,自动触发执行
  • __call__ 对象后面加括号,触发执行
  • __dict__ 查看类或对象中的所有成员
  • __str__ 如果一个类中定义了__str__方法,那么在打印对象时,默认输出该方法的返回值
  • __getitem__ 用于索引操作 表示获取数据
  • __setitem__ 用于索引操作 表示设置数据
  • __delitem__ 用于索引操作 表示删除数据

 

 

异常处理

 

posted on 2017-04-14 14:44  奋斗德路  阅读(94)  评论(0)    收藏  举报