zoukankan      html  css  js  c++  java
  • Python面向对象高级编程

    __slots__:在定义class的时,定义一个特殊的__slots__变量,来限制该class实例能添加的属性
    class Student(object):
        __slots__ = ("name","age")
    s = Student()
    s.name = "fred"
    s.city = "chengdu"  #'Student' object has no attribute 'city'
    
    class Stu(Student):
        pass
    stu = Stu()
    stu.city = "chengdu"    #__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的
                            #除非在子类中也定义__slots__,这样,子类实例允许定义的属性就是自身的__slots__加上父类的__slots__
    @property装饰器:负责把一个方法变成属性调用
    class Student(object):
        @property   #表明接下来的birth只是一个属性
        def birth(self):
            return self._birth
    
        @birth.setter
        def birth(self,value):
            self._birth = value
        
        @property  #表明接下来的age只是一个属性
        def age(self):
            return 2015 - self._birth
    s = Student()
    s.birth = 2000
    print(s.age)    #15
    多重继承:一个子类可以获得多个父类的所有功能
    class Dog(Mammal, RunnableMixIn, CarnivorousMixIn):
        pass
    定制类
    __str__:返回打印类时的字符串
    __repr__:返回直接查看类时的字符串
    __iter__:__iter__()方法,返回一个迭代对象,然后不断调用__next()__方法拿到下一个值
    __next__
    __getitem__:实现像list那样的功能
    __getattr__:__getattr__()方法,动态返回一个属性
    __call__:__call__()方法,直接对实例进行调用
    class Student(object):
        def __init__(self,name):
            self.name = name
        def __str__(self):
            return "Student object (name %s)" % self.name
        __repr__ = __str__
    枚举类
    from enum import Enum
    Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))
    for name, member in Month.__members__.items():  #value默认从1开始
        print(name, '=>', member, ',', member.value)    #Jan => Month.Jan , 1 ... Dec => Month.Dec , 12
    元类
    • type()

        用type()创建一个class对象,依次传入3个参数:

      1. class的名称;
      2. 继承的父类集合,注意Python支持多重继承,如果只有一个父类,别忘了tuple的单元素写法;
      3. class的方法名称与函数绑定,这里我们把函数fn绑定到方法名hello上。
    Hello = type('Hello', (object,), dict(hello=fn)) # 创建Hello class
    • metaclass:可以把类看成是metaclass创建出来的“实例”
     
     
     
     
     
     
     
  • 相关阅读:
    POJ2635-The Embarrassed Cryptographer-大整数素因子
    poj2115-C Looooops -线性同余方程
    POJ1942-Paths On a Grid-组合数学
    poj1850-CODE-组合
    POJ1019-Number Sequence-数数。。
    CF-Contest339-614
    POJ3252-RoundNumbers-排列组合
    睡前小dp-poj3254-状压dp入门
    AC自动机-HDU3065-简单题
    python学习笔记 day32 实现网盘上传下载功能
  • 原文地址:https://www.cnblogs.com/sghy/p/8081317.html
Copyright © 2011-2022 走看看