zoukankan      html  css  js  c++  java
  • 定制类

    class Student(object):
        pass
    s = Student()
    s.name = 'Michael'
    print(s.name)
    
    def set_age(self, age):
        self.age = age
    from types import MethodType
    s.set_age = MethodType(set_age, s) #给实例绑定一个方法
    s.set_age(25)
    print(s.age)
    #注意给一个实例绑定的方法对于另一个实例是不起作用的
    s2 = Student() #创建新的实例
    #为了给所有的实例都绑定方法,可以给class绑定方法
    def set_score(self, score):
        self.score = score
    Student.set_score = set_score
    s.set_score(100)
    print(s.score)
    s2.set_score(99)
    print(s2.score)
    
    #如果我们想限制类的属性,比如,只允许对Student实例添加name和age属性
    #__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的:
    #除非在子类中也定义__slots__,这样,子类实例允许定义的属性就是自身的__slots__加上父类的__slots__。
    class Student(object):
        __slots__ = ('name', 'age')
    s = Student()
    s.name = 'Michael'
    s.age = 25
    #s.score = 99 #因为__slots__('name', 'age')限制Student实例只能添加name和age属性
    
    class Teacher(object):
        def __init__(self, name, subject):
            self.name = name
            self.subject = subject
    t = Teacher('wangxin', 'math')
    print(t.name)
    print(t.subject)
    
    class Student(object):
        def __init__(self, name):
            self.name = name
    print(Student('Michael'))
    
    class Student(object):
        def __init__(self, name):
            self.name = name
        def __str__(self):
            return 'Student object (name:%s)' %self.name
        __repr__ = __str__
    print(Student('Michael'))
    
    class Fib(object):
        def __init__(self):
            self.a, self.b = 0, 1
        def __iter__(self):
            return self
        def __next__(self):
            self.a, self.b = self.b, self.a+self.b
            if self.a > 100000:
                raise StopIteration();
            return self.a
    for n in Fib():
        print(n)
    #要表现得像list那样按照下标取出元素,需要实现__getitem__()方法:
    class Fib(object):
        def __getitem__(self, n):
            a, b = 1, 1
            for x in range(n):
                a, b = b, a+b
            return a
    f = Fib()
    print(f[0])
    print(list(range(100))[5:10])
    
    class Fib(object):
        def __getitem__(self, n):
            if isinstance(n, int):
                a, b = b, a+b
            return a
            if isinstance(n, slice):
                start = n.start
                stop =  n.stop
                if start is None:
                    start = 0
                a, b = 1, 1
                L = []
                for x in range(stop):
                    if x >= start:
                        L.append(a)
                    a, b = b, a+b
                return L
    f = Fib()
    print('---------')
    print(f[0:5])
  • 相关阅读:
    mysql数据库备份脚本
    int main(int argc,char *argv[])参数的应用
    文件I/O实现cp复制功能
    网络通信TCP编程实例代码
    外部碎片、进程描述符、内部碎片
    程序、进程、作业、线程的关系
    word2016怎么从第三页开始设置页码
    ARMs3c2440开发板挂接NFS服务
    u-boot添加一个hello命令
    vi 编辑器跳转到指定行数
  • 原文地址:https://www.cnblogs.com/rain-1/p/5595285.html
Copyright © 2011-2022 走看看