python双下划线含义、MethodType把函数变为方法以及类继承
来源:互联网 发布:vb for循环嵌套if 编辑:程序博客网 时间:2024/05/17 05:14
不多说,直接给出学习代码记录
# python对属性 权限的控制是通过属性名来实现的# 如果一个属性由双下划线开头(__),则该属性就无法被外部访问# 例1. 双下划线开头的属性不能直接被外部访问class Person(object): # 继承object类得到新式类 def __init__(self, name): self.name = name self._sex = 'M' self.__age = 20p = Person('Alice')print(p.name)print(p._sex)# print(p.__age) # 这个地方会报错,告诉你该属性不存在print(p.__dict__) # 可以看到其他属性都没变,但__age变成了_Person__ageprint(p._Person__age) # 这样就可以访问到__age属性了# 如果一份属性以"__xx__"的形式定义,那么它又可以被外部访问了# 因为以"__xx__"定义的属性在python中称为特殊属性,有很多预定义的特殊属性可以使用#以单下划线开头的属性虽然也可以被外部访问,但按照习惯不应该这么做#利用types.MethodType()把一个函数变为一个方法import typesdef fn_get_grade(self): if self.score >= 80: return 'A' if self.score >= 60: return 'B' return 'C'class Person(object): def __init__(self, name, score): self.name = name self.score = scorep1 = Person('Bob', 90)p1.get_grade = types.MethodType(fn_get_grade, p1)print(p1.get_grade())p2 = Person('Hansen', 75)# print(p2.get_grade()) # 会报错,告诉你 属性不存在# 和属性类似,方法也分实例方法和类方法class Person(object): count = 0 @classmethod # 通过该标记,方法将绑定到类上,而非类的实例,通常将参数名命名为cls def how_many(cls): return cls.count @property # 像访问属性一样调用方法 def getName(self): return self.name def __init__(self, name): self.name = namePerson.count = Person.count + 1print(Person.how_many())p1 = Person('Tim')print(Person.how_many())print(p1.getName)# 因为是在类上调用,而非实例上调用,因此类方法无法获得任何实例变量,只能获得类引用# 类的继承# 多态:同一方法会有不同的反馈和流程class Person(object): def __init__(self, name, gender): self.name = name self.gender = genderclass Student(Person): def __init__(self, name, gender, score): super(Student, self).__init__(name, gender) # 继承Person的name和gender self.score = scoreclass Teacher(Person): def __init__(self, name, gender, course): super(Teacher, self).__init__(name,gender) self.course = coursep = Person('Bob', 'Male')s = Student('Alice', 'Female', 90)t = Teacher('David', 'Male', 'Math')isinstance(p, Person) # 判断p的类型isinstance(s, Person) dir(s) # 获取变量的所有属性getattr(s, 'name') # 获得name属性, 若属性不存在则报错getattr(s, 'name', 'Bob') # 获得name属性, 若属性不存在则返回默认值'Bob'setattr(s, 'name', 'Hansen')# 比较运算符# __cmp__(self, other)# __eq__(self, other)# __lt__(self, other)# __gt__(self, other)# 数字运算符# __add__(self, other)# __sub__(self, other) # 减# __mul__(self, other)# __div__(self, other) # 除# 逻辑运算符# __or__(self, other)# __and__(self, other)# 转为字符串# __str__# __repr__# __unicode__
阅读全文
0 0
- python双下划线含义、MethodType把函数变为方法以及类继承
- python 使用MethodType绑定方法到类
- python 使用MethodType绑定方法到类
- python进阶14:实例方法和类方法、types.MethodType()
- python MethodType
- python MethodType方法详解和使用
- python 中MethodType方法详解和使用
- python 变量名中的下划线、双下划线含义
- Python关键字yield把函数变为generator生成器
- python下划线变量的含义
- python下划线变量的含义
- python下划线变量的含义
- python下划线变量的含义
- python下划线变量的含义
- python下划线变量的含义
- 动态绑定方法 MethodType()
- python 下划线 函数 解释
- python类-各种双下划线
- 服务器上配置jupyter
- 微信实习面试感想
- Elasticsearch简介&基本使用
- 接口自动化-postman集成Jenkins
- Ubuntu 14.04下搭建Web服务器(MySQL+PHP+Apache) 教程
- python双下划线含义、MethodType把函数变为方法以及类继承
- 关于原谅
- 【python】基本数据类型
- 64位windows下Xgboost安装血与泪的总结
- eclipse maven配置
- 新linux服务器需要安装的模块
- gradle各个版本资源
- 使用list和tuple
- 20171220Link2