python学习笔记-实例方法、类方法、静态方法、属性方法
2017-11-05 20:21
936 查看
class A(object): m = 20 #实例方法 def __init__(self): self.x = 10 def fun(self): print("fun") #类方法 @classmethod def class_test(cls): cls.m = 30 #静态方法 @staticmethod def static_test(): print("this is test") a = A() a.class_test() print(A.class_test()) print(a.m) print(A.m) a.static_test() A.static_test() a.fun()
output
None 30 30 this is test this is test fun
实例方法可以通过创建的类对象的引用去调用,不能通过类名.实例方法进行调用。实例方法需要传入self参数,即实例对象的引用。
但是: 类方法和静态方法可以通过类对象引用和类名去调用。
类方法主要用来修改类变量,当然你也可以通过类名.类变量进行修改,类方法需要传入cls参数,即指向该类,因为类也是对象。
@classmethod def class_test(cls): cls.m = 30 print("cls in classmethod",cls) A.class_test() a.class_test() out------------------------------------- cls in classmethod <class '__main__.A'> cls in classmethod <class '__main__.A'>
静态方法在括号里不需要传入什么参数,其实就是我们常用的函数,只不过我们在开发的时候用面向对象而不是面向过程,所以最好也把函数包装成方法。静态方法一般和创建的实例对象和该类没有什么关系。当然你也可以传入self参数,不过这个self参数并没有像别的方法中的self参数指向这个实例,而是告诉你需要传入A的实例对象,或者这个A类
@staticmethod
def static_test(self):
print(“self in staticmethod : “,self)
a.static_test(A)
A.static_test(A)
a.static_test(a)
A.static_test(a)
out———————————————————–
self in staticmethod :
#####
2位不同的老师讲的课,知识点的方面不尽相同,可以互补。最近越发觉得做生物是在浪费生命了,离开的感觉愈来愈强烈。不过也有各种事由,无法脱身。理科男就是这样,心里有无限的想法,每次写的时候却发现写的如此枯燥,,不写也罢。20180110
属性方法:
如果你要写一个银行系统,你直接把bank.balance 暴露暴露出去,到时可以随意更改,比如 把self.balance = -1000,银行系统可不会白白让你欠钱,这样显然不太好。这时,我们可以用set和get方法
class Bank(object): def __init__(self,name): self.name = name def get_balance(self): return "客户 %s 的余额是 %s" % (self.name,self.__balance) def set_balance(self,value): if not isinstance(value,int): raise ValueError("value must be integer") if value < 0: raise ValueError("value must > 0") else: self.__balance = value bank = Bank("Tom") bank.set_balance(100) print(bank.get_balance())
通过上面代码,你就不能设置bank.balance = -1000,这样就符合逻辑了。下面用属性方法做类似的功能
class Bank(object): def __init__(self,name): self.name = name @property def balance(self): return "客户 [%s] 的账户余额为 [%s] " % (self.name,self.account) @balance.setter def balance(self,value): if not isinstance(value,int): raise ValueError("value must be Integer") if value < 0: print("value must >0") else: self.account = value @balance.deleter #删除account属性 def balance(self): del self.account bank = Bank("Tom") bank.balance = 100 #有了setter 就可以设置属性值 print(bank.balance) print(bank.account) del bank.balance # 执行balance方法,删除account属性 print(bank.balance)
相关文章推荐
- Ext学习笔记01 - NameSpace,类实例属性,类实例方法,类静态方法
- Ext学习笔记 - NameSpace,类实例属性,类实例方法,类静态方法
- python进阶学习笔记(四)——python中访问限制、创建类属性、定义实例方法、定义类方法、类的继承
- Ext学习笔记01 - NameSpace,类实例属性,类实例方法,类静态方法
- Python学习笔记——实例方法和静态方法
- python面向对象编程(2)—— 实例属性,类属性,类方法,静态方法
- jQuery源码研究分析学习笔记-静态方法和属性(10)
- <<Python基础教程>>学习笔记 | 第09章 | 魔法方法、属性和迭代器
- python学习笔记(属性和方法)
- [原创]java WEB学习笔记102:Spring学习---Spring Bean配置:bean配置方式(工厂方法(静态工厂方法 & 实例工厂方法)、FactoryBean) 全类名
- C++学习笔记4--静态属性 静态方法 虚方法 抽象方法 多态性 析构函数 运算符重载 多继承 虚继承
- python基础教程_学习笔记11:魔法方法、属性和迭代器
- JavaScript 学习笔记十四 this特性,静态方法 和实例方法,prototype
- python学习笔记-静态方法和类方法区别
- python学习笔记13-python面向对象,属性,方法
- java学习笔记4--java 静态方法和实例方法的区别
- Python学习笔记五(面向对象-类-方法-属性)
- python学习笔记之七:魔法方法,属性
- Python基础教程 第9章: 魔法方法、属性和迭代器 学习笔记