zoukankan      html  css  js  c++  java
  • 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

                                                                                                                                                                                                                                                                                                                                                                                               

  • 相关阅读:
    帝国 标签模板 使用程序代码 去除html标记 并 截取字符串
    iis6 伪静态 iis配置方法 【图解】
    您来自的链接不存在 帝国CMS
    帝国cms Warning: Cannot modify header information headers already sent by...错误【解决方法】
    .fr域名注册 51元注册.fr域名
    帝国网站管理系统 恢复栏目目录 建立目录不成功!请检查目录权限 Godaddy Windows 主机
    星外虚拟主机管理平台 开通数据库 出现Microsoft OLE DB Provider for SQL Server 错误 '8004' 从字符串向 datetime 转换失败
    ASP.NET 自定义控件学习研究
    CSS层叠样式表之CSS解析机制的优先级
    ASP.NET程序员工作面试网络收藏夹
  • 原文地址:https://www.cnblogs.com/A-FM/p/5706005.html
Copyright © 2011-2022 走看看