您的位置:首页 > 编程语言 > Python开发

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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 实例 class 对象
相关文章推荐