不多说,直接给出学习代码记录
# python对属性 权限的控制是通过属性名来实现的 # 如果一个属性由双下划线开头(__),则该属性就无法被外部访问 # 例1. 双下划线开头的属性不能直接被外部访问 class Person(object): # 继承object类得到新式类 def __init__(self, name): self.name = name self._sex = 'M' self.__age = 20 p = Person('Alice') print(p.name) print(p._sex) # print(p.__age) # 这个地方会报错,告诉你该属性不存在 print(p.__dict__) # 可以看到其他属性都没变,但__age变成了_Person__age print(p._Person__age) # 这样就可以访问到__age属性了 # 如果一份属性以"__xx__"的形式定义,那么它又可以被外部访问了 # 因为以"__xx__"定义的属性在python中称为特殊属性,有很多预定义的特殊属性可以使用 #以单下划线开头的属性虽然也可以被外部访问,但按照习惯不应该这么做 #利用types.MethodType()把一个函数变为一个方法 import types def 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 = score p1 = 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 = name Person.count = Person.count + 1 print(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 = gender class Student(Person): def __init__(self, name, gender, score): super(Student, self).__init__(name, gender) # 继承Person的name和gender self.score = score class Teacher(Person): def __init__(self, name, gender, course): super(Teacher, self).__init__(name,gender) self.course = course p = 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__