当前位置:首页 » 编程语言 » python静态方法作用

python静态方法作用

发布时间: 2023-10-13 00:33:03

㈠ 求助python高手,Python里有静态方法和私有方法,这两者有什么区别呢

静态方法不能访问实例的属性,私有访问只能在类的内部访问,不能被实例访问,详细看代码:

classPerson:
age=0
wegiht=0
__sex=''
def__init__(self):
pass
@staticmethod
defget_stactic_age():
Person.age+=1#这里不能用self.age访问
def__add(self):
print("这是一个私有方法,只能在类中使用")
defget_weight(self):
print("这是一个公有方法,可以被类的实例使用")
tom=Person()
tom.get_weight()#这个可以正常访问
tom.__add()#这个不能正常访问,报AttributeError:'Person'objecthasnoattribute'__add'异常

㈡ python类方法和静态方法有什么用

主要特点就是需要绑定到一个对象上,python解析器会自动把实例自身传递给方法,如14行所示,而直接使用InstanceMethod.f1()调用方法是不行的。

class InstanceMethod(object):
def __init__(self, a):
self.a = a
def f1(self):
print 'This is {0}.'.format(self)
def f2(self, a):
print 'Value:{0}'.format(a)
if __name__ == '__main__':
# im = InstanceMethod()
im = InstanceMethod('233')
im.f1()
# im.f2()
im.f2(233)

㈢ Python 中的 classmethod 和 staticmethod 有什么具体用途

classmethod:类方法
staticmethod:静态方法

在python中,静态方法和类方法都是可以通过类对象和类对象实例访问。但是区别是:

@classmethod 是一个函数修饰符,它表示接下来的是一个类方法,而对于平常我们见到的则叫做实例方法。类方法的第一个参数cls,而实例方法的第一个参数是self,表示该类的一个实例。

普通对象方法至少需要一个self参数,代表类对象实例

类方法有类变量cls传入,从而可以用cls做一些相关的处理。并且有子类继承时,调用该类方法时,传入的类变量cls是子类,而非父类。对于类方法,可以通过类来调用,就像C.f(),有点类似C++中的静态方法, 也可以通过类的一个实例来调用,就像C().f(),这里C(),写成这样之后它就是类的一个实例了。

静态方法则没有,它基本上跟一个全局函数相同,一般来说用的很少

Example 1:

>>>classa():
@staticmethod
defstaticm():
print'static'
defnormalm(self):
print'nomarl',self
@classmethod
defclassm(cls):
print'class',cls


>>>a1=a()
>>>a1.normalm()
nomarl<__main__.ainstanceat0x84dddec>
>>>a1.staticm()
static
>>>a1.classm()
class__main__.a
>>>type(a)
<type'classobj'>
>>>type(a1)
<type'instance'>


Example 2:

classA(object):
@classmethod
defcm(cls):
print'类方法cm(cls)调用者:',cls.__name__
@staticmethod
defsm():
print'静态方法sm()被调用'
classB(A):
pass
A.cm()
B.cm()
A.sm()
B.sm()
输出:
类方法cm(cls)调用者:A
类方法cm(cls)调用者:B
静态方法sm()被调用
静态方法sm()被调用


@classmethod与@staticmethod的应用实例

#!/usr/bin/envpython
#-*-coding:utf-8-*-
classTClassStatic(object):
obj_num=0
def__init__(self,data):
self.data=data
TClassStatic.obj_num+=1
defprintself(self):
print("self.data:",self.data)
@staticmethod
defsmethod():
print("thenumberofobjis:",TClassStatic.obj_num)
@classmethod
defcmethod(cls):
print("cmethod:",cls.obj_num)
cls.smethod()
defmain():
objA=TClassStatic(10)
objB=TClassStatic(12)
objB.printself()
objA.smethod()
objB.cmethod()
print("------------------------------")
TClassStatic.smethod()
TClassStatic.cmethod()
if__name__=="__main__":
main()

输出结果如下:

('self.data:',12)
('thenumberofobjis:',2)
('cmethod:',2)
('thenumberofobjis:',2)
------------------------------
('thenumberofobjis:',2)
('cmethod:',2)
('thenumberofobjis:',2)

㈣ python类方法和静态方法的区别

类方法,可以调用类属性。。。用于操作一些类中的公有属性。。。比如这个士兵类,每个士兵都拥有一把相同的枪(gun),都有相同的最大血量(maxhp),如果在创建对象的时候,一个一个的赋值,就会显得比较多余。。。因此,把这两个属性提出来,作为一个公有属性。。即每个士兵对象,都拥有一把95式步枪,都拥有30的最大血量。。之后声明一个类方法(public),之后可以在类方法中,针对这两个公有的属性进行操作。。。

静态方法,其实更像一个与类几乎无关的函数。。不能操作类中的任何属性。。所以它并不是用来操作类与对象本身的。。。但它又可以被对象调用。。。。比如游戏中,与士兵对话,士兵说话的内容一般存在数据库中。。而当主角与士兵对话,针对数据库查询,并输出到UI界面的相关工作,就可以放在这个函数里。。这样会让代码结构更清晰。。。当然,如果不嫌乱,写在类方法中,也是可以的。。。有人觉得PYTHON的静态方法是鸡肋。。它也确实不是必须的,但有时候却可以让代码结构更清晰。。。比如你有几十种不同的士兵类,你要找到对应每一个类的数据操作相关的函数,就会显得很困难。。。适当使用静态方法,就显得一目了然

热点内容
夏新手机初始密码是什么 发布:2025-02-01 06:58:23 浏览:790
ppt存储路径 发布:2025-02-01 06:55:06 浏览:115
aspx脚本 发布:2025-02-01 06:44:13 浏览:999
访问策略更新 发布:2025-02-01 06:39:29 浏览:498
pythoneditplus 发布:2025-02-01 06:31:57 浏览:275
bmp转png源码 发布:2025-02-01 06:30:08 浏览:470
魔兽联盟人多的服务器是什么 发布:2025-02-01 06:25:25 浏览:41
c语言字符串子串删除 发布:2025-02-01 06:25:23 浏览:534
怎么改电脑锁屏密码 发布:2025-02-01 06:16:55 浏览:472
存储卡不能格式化怎么办 发布:2025-02-01 06:02:55 浏览:691