首页 > 编程语言 > 详细

python20181217 面向对象的学习总结

时间:2018-12-18 01:18:10      阅读:135      评论:0      收藏:0      [点我收藏+]
面向对象(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 面向对象的学习总结

原文:https://www.cnblogs.com/kkww/p/10134680.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!