python20181217 面向对象的学习总结
Posted kkww
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python20181217 面向对象的学习总结相关的知识,希望对你有一定的参考价值。
面向对象(oop): 类:抽象概念,类型 对象:实际物体,类实例化对象 属性: 描述类---》类属性 描述对象---》实例属性 抽象类型 class Student(object): count = 0 # 类属性:类名.属性名 def __init__(self, score): # --->构造函数:实例化对象时自动调用的 # print(‘__init__ is called‘) # self : 当前对象 self.score = score Student.count += 1 实例方法 def setName(self, name): if 1 < len(name) < 32: self.name = name return True else: return False def run(self): print(‘%s is running‘ % self.name) def __del__(self): # 析构方法:对象销毁的时候自动调用调用 print(‘delete.....‘) 实例化对象 s1 = Student(100) 访问对象的属性 print(s1.getScore()) 私有属性:不能通过对象直接访问,但是可以通过方法访问 print(s1._Student__score) 调用方法 s2.setName(‘python‘) 私有方法:不能通过对象直接访问 # s1.__privateFun() s1._Student__privateFun()
私有的属性、方法,不会被子类继承 继承: 能使用现有类的所有功能,并可以对原有类的功能进行扩展,通过继承创建的新类被称为“子类”,被继承的类称为“父类”“超类”“基类”。 一个子类可以继承多个父类。 如下: class Animal(object): def... class Dog(animal): def... Dog类是子类,Animal是父类,Dog继承了Animal
调用父类方法: 父类名称.__init__(self,参数1,参数2,......) super(子类, self).__init__(参数1,参数2,......)
多态:同一种类型,不同的表现形式
限制属性: __slot__ @property 访问器 可以单独存在 @score.setter 设置器 不单独存在,一定要有property
多继承:一个子类可以继承多个父类,称为多继承 dir() 获取类或者对象的方法和属@score.setter __mro__ 获取类的继承顺序
python魔法方法: __str__ 打印本类对象时,自动调用 __repr__ 在解释器环境下直接输出本对象,自动调用的方法 __len__ 调用len函数的时候自动调用的方法 __call__ 调用本类对象的时候自动调用的方法 __iter__ 返回可迭代对象 __next__ 随着循环自动调用的 raise StopIteration() 循环遍历终止 __getitem__ 索引时自动调用的方法 slice 切片: start起始 stop结束 step间隔
枚举类: @unique 防止枚举成员的重复 print输出要加.value 如下: from enum import Enum class Menu(Enum): INSERT=1 DELETE=2 UPDATE=3 SHOW=4 print(Menu.INSERT.value)
元类(metaclass)
# type()构建一个类
def f(self, name=‘python‘):
print(‘hello %s‘% name)
Test = type(‘Test‘, (object,), dict(show=f))
t = Test()
t.show()
# 另一种构建类的方法,是先构建元类,以元类为模板构建类
class ListMetaclass(type):
def __new__(cls, name, bases, attrs):
‘‘‘类方法‘‘‘
attrs[‘add‘] = lambda self, value : self.append(value)
return type.__new__(cls, name, bases, attrs)
class Mylist(list, metaclass=ListMetaclass):
pass
l = Mylist()
print(type(l))
l.add(1)
l.add(‘hello‘)
print(l)
以上是关于python20181217 面向对象的学习总结的主要内容,如果未能解决你的问题,请参考以下文章
201871010119-帖佼佼《面向对象程序设计(java)》课程学习总结