---恢复内容开始---
一、方法
python的方法中分为三种方法:
静态方法
动态方法(普通方法)
类方法
其中常用的方法为:静态方法和动态方法
class MyClass: def __init__(self, name): self.name = name # 动态方法 def show(self): return self.name # 静态方法 @staticmethod def detail(name): print '%s is good person.' %name # 类方法 @classmethod def show_detail(cls): cls.detail('Kevin') if __name__ == "__main__": object = MyClass("Jack") p_name = object.show() MyClass.detail(p_name) MyClass.show_detail()
方法调用遵循的规则:
1.动态方法由对象调用;
2.静态方法由类调用;
3.类方法,属于静态方法的一种,通过类来调用,执行的时候会自动将类名传递进去,因此要有一个默认的接收参数.
说明:
什么是对象?对类进行实例化后即为对象,如上述代码,object = MyClass("Jack"),对MyClass这个类进行实例化后,产生了object这个对象。
什么是类?通过class定义出来的,如上述代码,MyClass即为定义出来的类。
什么是动态方法?动态方法,我们常用的通过def定义出来的方法,即为动态方法(也叫做普通方法),注意动态方法前面是没有staticmethod这个装饰器装饰的。
什么是静态方法?静态方法,与动态方法的最大区别是,有staticmethod这个装饰器对方法进行装饰,可以理解为动态方法加个staticmethodz这个装饰器进行装饰后,即为静态方法。
二、字段
字段的分类:
动态字段;
静态字段;
私有字段;
class MyClass: # 静态字段,属于类,多个对象共用一个静态字段 leader = "abuve" def __init__(self): # 动态字段,属于对象,也可以叫普通的字段,每个对象都会有自己独有的动态字段 self.name = "kevin"
字段的调用访问遵循的规则:
1.静态字段,属于类,通过类对静态字段进行调用访问;
2.动态字段,属于方法,通过方法对动态字段进行调用访问。
class Company: company_name = "Center" def __init__(self, dept, leader): self.dept = dept self.leader = leader def ... if __name__ == "__main__" it_dept = Company("IT", "Abuve") hr_dept = Company("HR", "Kevin") 对于上述代码,我们通过下面的方式访问其中的字段数据: print it_dept.dept print hr_dept.leader print Company.company_name
3.私有字段,私有字段,类不能直接对私有字段进行调用访问,而是通过调用私有字段对应的方法的方式来调用访问私有字段。
class MyClass: def __init__(self, name): self.__name = name def show(self): print self.__name if __name__ == "__main__": object = MyClass("Abuve") # 通过对象无法访问到私有字段 print object.__name # 私有字段通过类的内部方法访问 object.show() # 通过类名前加入下划线的方式同样可以访问到 print object._MyClass__name
三、属性
class PageSet: def __init__(self, count, page_size): self.count = count self.page_size = page_size # 通过装饰器将page_num变为属性,对象调用时不需要再加括号 @property def page_num(self): page_count, remainder = divmod(self.count, self.page_size) if remainder == 0: return page_count else: return page_count + 1 if __name__ == "__main__": # 传入条目总数,以及单页size大小 page_tools = PageSet(108, 10) # 像访问字段一样执行了page_num方法 print page_tools.page_num
上面的代码实现了一个分页设置,我们通过装饰器property将page_num方法变为属性,那么该方法在被对象调用时,就像访问字段一样,不需要再加括号了。此时我们只实现了通过字段的方式来访问方法
我们对属性可以进行:删除和赋值操作
class PageSet: def __init__(self, count, page_size): self.count = count self.page_size = page_size @property def page_num(self): page_count, remainder = divmod(self.count, self.page_size) if remainder == 0: return page_count else: return page_count + 1 @page_num.setter def page_num(self, value): print value print 'This is set function.' @page_num.deleter def page_num(self): print 'This is delete function.' if __name__ == "__main__": page_tools = PageSet(108, 10) # 调用property修饰属性 page_tools.page_num # 调用page_num.setter修饰属性 page_tools.page_num = 12 # 调用page_num.deleter修饰属性 del page_tools.page_num