面向对象编程(六)
类有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__ 用于索引操作 表示删除数据
异常处理
浙公网安备 33010602011771号