PoEdu_Python_Lesson010_类的特性
来源:互联网 发布:代理商查询系统源码 编辑:程序博客网 时间:2024/06/02 03:32
没有写在方法里的变量的属性
使用类名即可访问
静态属性,属于类本身的
class UserInfo(object): name = "Poedu"user=UserInfo()user.name #可以UserInfo.name #可以
user.name = ‘lala’
ususr.name改变了,而Info.name不变,其它定义的对象的name也不变
UserInfo.name = ‘lala’
所有对象的name都变为了lla
类里面的方法一定要有self属性,也就是方法的第一个参数为self
动态绑定
空类里面可以进行后绑定
class Demo(object): passd1 = Demo()d1.user = 'root' #绑定了一个属性userdef foo(self): passd1.foo = food1.foo #可以使用foo函数 绑定到了d1对象上Demo.foo = foo #绑定到类上 这个类的所有对象都可共享得到
可以指定可绑定的
__slots__= (‘name’,’password’)
现在就只能动态绑定name和password
杜绝Python的动态绑定带来的风险
特性
希望一些属性能够隐藏,但是又希望无痛访问
比如,使用get和set的函数,能够不调用方法,而直接通过.属性进行访问,但是又希望保留方法中检查的功能
def get_name(self) return self.name@property #读特性(只允许读)def name(self): return self.name
此时就可以这样访问了: user.name,看上去name是一个方法,但其实是一个方法,但是user.name = ‘lala’会报错,因为这是“读”特性,不允许写
@name.setter #只写特性def name(self,name): self.name = nameuser.name = 'lala'
直接打印对象
比如有一个对象User,使用print(User)打印出里面的内容
正常的打印是输出main ,object…
方法如下:
def __str__(self): #这是给用户看的 return "__str__" print(User) #打印__str__
def __repr__(self): #这是给程序员看的 return "demo self"u = User()print(u) #打印demo self
def __iter__(self): return self
def __next__(self): print(”)
可以用上面这两个做一个遍历
def __iter__(self): return selfdef __next__(self): ret = random.randint(1..10000) if ret == 10000: raise StopIteration() #停止遍历 return retfor in user: print(i)
但是,它也只能做个,它连下标操作都做不了,如果需要响应,则还需要__getitem__
def __getitem(self,item): return item
响应切片
def __getitem__(self,item): if isinstance(item,int): return "int" if isinstance(item,slice): return "切片"
写了很多的方法,原来的系统已经搭建完成,现在需要在每一个函数之前进行一个验证,如果函数多了,如果挨个的加,工作量会很大,但是在Python可以使用call来做
def __call__(self): print("call")user = UserInfo()user() #调用call方法
示例
class CheckFoo(object) def __init__(self,foo): self.__foo=foo def __call__(self): print("验证") self.__foo()def main(): ckfoo = CheckFoo() ckfoo()
构造函数与析构函数
构造
def __init__(self):
析构
def __del__(self):
枚举
导入
form enum import Enum
大写的Enum才是我们要使用的那个
使用:
color = Enum(’color‘,(‘red’,’black’,gren))
首先是名称,然后跟一个元组
@unique #去重操作:如果有重复的,会检查出来,并且不通过编译class Color(Enum) RED = 1 YEW = 2
错误处理
语法:
try: ... raise ..except ValueError: #ValueError错误类型 ...except ....: ...finally : ...
示例
age = -1while age == -1: temp = input("age:") try: age = int(age) except: age = -1
示例2
try: file = open(input("name"),'w') age = input("age") file.close() #如果上一行出错了,那么就没close了except ValueError: print("输入错误")
可以在错误提示中使用file.close()这个函数,确保文件关闭,但是,一旦错误多了,那么就需要写很多close,可以使用finally:不管怎样都会执行
示例3:
file = open(input("name"),'w')try: age = input("age") file.close() #如果上一行出错了,那么就没close了except ValueError as e: print("输入错误",e)finally: if file: file .close()
示例4:
file = open(input("name"),'w')try: age = input("age") file.close() #如果上一行出错了,那么就没close了except Exception as e: #接收所有错误,从继承体系中可知,多态.. print("输入错误",e)finally: if file: file .close()
大致继承体系:obeject > BaseException > Exception > …(各种类型的错误)
所以不写__init__的空类也不会出问题,就算其中什么都不写,它还是有一些方法,因为他继承自object
所以写一个Excption就能接收所有错误了
示例5
def div(n1,n2): if n2 == 0: raise ValueError("除数为0") return n1/n2
也可以新建一个我们自己的错误类,继承自Exception
作业
写一个模拟人生…锻炼使用类的继承
- PoEdu_Python_Lesson010_类的特性
- 特性类的使用
- 类的高级特性
- 类的组合特性
- 类的特性
- Pyton的类特性
- java类的特性
- 类的其他特性
- 类的高级特性
- 类的特性
- CategoryAttribute 的几个特性类
- 类的继承访问特性
- Python类的特性方法
- 抽象类的几个特性
- 学习,类的特性心得!
- 探讨抽象类的特性
- 类的三大特性
- 类的三大特性
- 1006换个格式输出整数 (15)
- pythonWeb -- Django开发- 模型Model 和 数据库的操作
- 203. Remove Linked List Elements(Java)
- 高级表单与表格、BFC研究
- 自己实现一个简单的散列表
- PoEdu_Python_Lesson010_类的特性
- 简析设计模式之策略模式
- 如何判断JVM是运行在Client模式还是Server模式?
- tf-idf关键词提取算法
- 【MySQL】(2)MySQL基础语法
- 精彩的网文汇总分享
- 2017.07.22工作日记
- Python学习04_图像数据类型及颜色空间转换
- 图像处理9:扩散填充