• Python 温习


    关于Python内置函数的示例

     1 Type "copyright", "credits" or "license()" f重写or more information.
     2 >>> class Student:
     3     def __init__(self,score):
     4         self.score=score
     5     def __len__(self):
     6         return self.score
     7 
     8     
     9 >>> Jack=Student()
    10 >>> Jack=Student(103)
    11 >>> Jack
    12 <__main__.Student object at 0x02BDA470>
    13 >>> len(Jack)
    14 103
     1 >>> class qwe(str):
     2     def upper(self):
     3         return self.lower()
     4 
     5     
     6 >>> a='ASD'
     7 >>> a=qwe(a)
     8 >>> a
     9 'ASD'
    10 >>> a.upper()
    11 'asd'

    测试对象属性的部分方法.

     1 Type "copyright", "credits" or "license()" for more information.
     2 >>> class Student():
     3     pass
     4 
     5 >>> Jack=Student()
     6 >>> hasattr(Jack,'name')
     7 False
     8 >>> Jack.name='Jack'
     9 >>> Jack.name
    10 'Jack'
    11 >>> hasattr(Jack,'score')
    12 False
    13 >>> setattr(Jack,'socre',103)
    14 >>> Jack.socre
    15 103
     1 Type "copyright", "credits" or "license()" for more information.
     2 >>> class Student():
     3     name='jack'
     4 
     5     
     6 >>> jack=Student()
     7 >>> jack.name
     8 'jack'
     9 >>> getattr(jack,name)
    10 Traceback (most recent call last):
    11   File "<pyshell#5>", line 1, in <module>
    12     getattr(jack,name)
    13 NameError: name 'name' is not defined
    14 >>> getattr(jack,'name')
    15 'jack'
    16 >>> getattr(jack,'score',404)
    17 404

    关于类的实例属性和类属性

    由于Python是动态语言,根据类创建的实例可以任意绑定属性 . (s.name='jack')

    给实例绑定属性的方法是通过实例变量直接赋值,或者通过self变量 . 

    下面就是通过self变量来绑定类属性.

    如果类本身就有该属性的话 , 当声明实例变量之后 , 会自动绑定类中提供的属性 , 但是如果在通过实例变量直接再将该属性再次赋值 , 这次的值可以覆盖类中的属性 , 当删除通过实例变量赋值过的属性之后 , 类中的属性就会自动重新绑定到实例变量上面.

     1 >>> class Student():
     2     name='Student'
     3 
     4     
     5 >>> s=Student()
     6 >>> s.name
     7 'Student'
     8 >>> s.name='jack'
     9 >>> s.name
    10 'jack'
    11 >>> del s.name
    12 >>> s
    13 <__main__.Student object at 0x02EE34B0>
    14 >>> s.name
    15 'Student'
    16 >>> 

    当类已经写好之后如何分别在 实例变量和类中 再次加入方法 , 方法的作用范围是什么?

    2016年7月26日 02:33:28 ......不早了 去冲个澡再来 .  

     1 Type "copyright", "credits" or "license()" for more information.
     2 >>> class Student:
     3     pass
     4 
     5 >>> jack=Student()
     6 >>> # 先开始给实例变量绑定属性 (只作用于该变量)
     7 >>> def Set_age(self,age):  #  和普通的类一样 这里也必须是 self 
     8     self.age=age
     9 
    10     
    11 >>> Set_age(jack,18)
    12 >>> jack.age
    13 18
    14 >>> loser=Student()
    15 >>> loser.age
    16 Traceback (most recent call last):
    17   File "<pyshell#11>", line 1, in <module>
    18     loser.age
    19 AttributeError: 'Student' object has no attribute 'age'

    上面的是比较简单的 . 直接写一个函数 , 套进去就行 . 

    下面开始将 类 绑定方法 并且观察作用范围 . 

     1 >>> from types import MethodType
     2 >>> class Student():
     3     pass
     4 
     5 >>> def Set_age(self,age):
     6     self.age=age
     7 
     8     
     9 >>> jack=Student()
    10 >>> Student.Set_age=MethodType(Set_age,Student)
    11 >>> loser=Student()
    12 >>> jack.Set_age(18)
    13 >>> loser.Set_age(28)
    14 >>> jack.age
    15 28
    16 >>> 
    17 >>> loser.age
    18 28

    可以看出来 , 不管添加方法是在该实例变量声明之前 还是 声明之后 这个实例变量都可以使用添加进去的方法 . 但是在添加之前 是不能让 已经声明的实例变量使用 将要添加的方法的.

    如何限制实例的属性 .

     1 >>> class Student():
     2     __slots__=('name')
     3 
     4     
     5 >>> jack=Student()
     6 >>> jack.name='Jack'
     7 >>> jack.score=19
     8 Traceback (most recent call last):
     9   File "<pyshell#5>", line 1, in <module>
    10     jack.score=19
    11 AttributeError: 'Student' object has no attribute 'score'
     1 >>> class Student():
     2     __slots__=('name')
     3 
     4     
     5 >>> class Teacher(Student):
     6     pass
     7 
     8 >>> jack=Teacher()
     9 >>> jack.score=18
    10 >>> jack.score
    11 18

    当继承的时候 __slots__是不起作用的 ,  

    当我们用  Python  的  print  输出的时候他们是调用该实例对象对应的类中 __str__函数 , 当直接调用该实例对象的时候 运行的是 __repr__

     1 >>> class Student():
     2     def __init__(self,name):
     3         self.name=name
     4     def __str__(self):
     5         return ('Student named %s' %self.name)
     6 
     7     
     8 >>> jack=Student('Jack')
     9 >>> print(jack)
    10 Student named Jack
    11 >>> jack
    12 <__main__.Student object at 0x02E41ED0>
    13 >>> class Student():
    14     def __init__(self,name):
    15         self.name=name
    16     def __str__(self):
    17         return ('Student named %s' %self.name)
    18     __repr__=__str__
    19 
    20     
    21 >>> jack=Student('Jack')
    22 >>> jack
    23 Student named Jack

    __iter__ 迭代

    如果一个类被用于 for 循环 , 类似list 和 tuple那样 , 就必须实现一个 __iter__方法 , 该方法返回一个迭代对象 , 然后 , Python 的 for 循环就会 开始调用 __next__方法 拿到循环的下一个值 . 直到遇到 StopIteration错误时推出循环 .

    下面我们写一个 Fib 类 , 可以用作for循环 ,                                              

     1 >>> class Fib():
     2     def __init__(self):
     3         self.a,self.b=0,1 # 初始化两个计数器 a,b
     4     def __iter__(self):
     5         return self # 实例的本身就是迭代对象 , 故只返回自己
     6     def __next__(self):
     7         self.a,self.b=self.b,self.a+self.b # 计算下一个值   # 在这里 没有先后之分 . 
     8         return self.a # 返回下一个值
     9 
    10     
    11 >>> for i in Fib():
    12     print(i)
    13 1
    14 1
    15 2
    16 3
    17 5
    18 8
    19 13
    20 21
    21 34
    22 55
    23 89
    24 144
    25 233
    26 377
    27 610
    28 987
    29 1597
    30 2584
    31 4181
    32 6765

                                                                                                                                                                                                                                                                                                                                                                                               

  • 相关阅读:
    问题:Failed to execute goal org.apache.maven.plugins:mavencompilerplugin:3.5.1:compile (defaultcompile)
    STL容器的内存分配
    C++中的引用到底是什么
    解决eclipse无法解析shared_ptr
    Deleted pointer causes undefined behaviour
    诞生于饭桌上的jcSQL语言
    状压dp做题笔记
    TC做题笔记
    数据结构做题笔记
    POI做题笔记
  • 原文地址:https://www.cnblogs.com/A-FM/p/5706005.html
Copyright © 2020-2023  润新知