python调用静态方法调用
Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的:
1)静态方法无需传入self参数,类成员方法需传入代表本类的cls参数;
2)从第1条,静态方法是无法访问实例变量的,而类成员方法也同样无法访问实例变量,但可以访问类变量;
3)静态方法有点像函数工具库的作用,而类成员方法则更接近类似Java面向对象概念中的静态方法。
实现静态方法和类方法的两种方式
一、在Python 2.3及之前,用staticmethod和classmethod类型对象包装实现
例子如下(注意print里的说明):
class MyClass:
val1 = 'Value 1'
def __init__(self):
self.val2 = 'Value 2'
def staticmd():
print '静态方法,无法访问val1和val2'
smd = staticmethod(staticmd)
def classmd(cls):
print '类方法,类:' + str(cls) + ',val1:' + cls.val1 + ',无法访问val2的值'
cmd = classmethod(classmd)
执行:
>>> mc = MyClass()
>>> mc.smd()
>>> mc.cmd()
>>> MyClass.smd()
>>> MyClass.cmd()
二、在Python 2.4及之后,用装饰器(decorators)实现
装饰器使用@操作符,例子如下:
class MyClass:
val1 = 'Value 1'
def __init__(self):
self.val2 = 'Value 2'
@staticmethod
def staticmd():
print '静态方法,无法访问val1和val2'
@classmethod
def classmd(cls):
print '类方法,类:' + str(cls) + ',val1:' + cls.val1 + ',无法访问val2的值'
Ⅱ python——Django项目开发:配置项目/static/路径,调用css、img、js等静态文件
在Django项目开发中,不能像正常web开发一样通过 'imgs/bg.jpg' 访问本地静态文件,需要做一些配置,才能实现静态文件的访问。
一、首先在项目根路径下新建一个static文件夹,然后在static文件夹下可以新建相应的css、imgs、js等文件夹,用于存放css、img、js等静态文件。
二、项目配置
1、打开settings.py,在底部添加:
2、打开urls.py,在 urlpatterns 中添加:(注意,如果你在blog目录下也建立了urls.py,那么就得在blog/urls.py中做修改。别忘了import settings):
(不过我经过实测,不加这一个,也可以完成静态文件的访问)
3、在html模板最上面添加:
然后在需要的地方按照这个格式进行调用,如:
最后重新运行项目,img等本地静态文件就可以被django找到了,这时模板对应的页面就可以显示使用img等文件了。
Ⅲ 在调用一些Python里的函数的时候 为什么有些函数需要实例化有些不需要
如果一个方法是静态方法或类方法,那么,可以直接调用。
如果一个方法不是静态的,那么,它会需要self来访问实例中的某些属性,那么就只能在实例上调用。
你给出的代码中,tensor_trans = transforms.ToTensor()这一句,实际上只是简化引用,并没有实例化transforms。
作为示例:
class MyUtil(object):
....@staticmethod
....def fn1():
........return 'a'
....def fn2(self):
........return 'b'
对方法fn1,我们可以直接调用:
x = MyUtil.fn1()
但对于fn2,则只能实例化后调用:
util=MyUtil()
x = util.fn2()
当然,对于fn1,也可以在实例上调用:
util=MyUtil()
x = util.fn1()
Ⅳ python 如何调用类的方法
以numpy为例,首先创建一个对象:
In[32]:a=numpp.arange(10)
然后,a就拥有了类的方法,例如求和:
In[33]:a.sum()
Out[33]:45
也可以使用类的方法,将其应用到类的对象上,例如:
In[34]:numpp.sum(a)
Out[34]:45
Ⅳ 为什么Python调用方法,有的前面加类名,有的不加
答: Python使用面向对象的方法进行编程时,确实有两种调用方法。第一,当被调用的方法是静态方法,那么这个时候无须实例化对象,直接按照类名.函数名格式即可,如math.sin(),在该函数的底层实现当中,使用了@staticmethod声明静态方法,我的理解是这样的,当某个方法经常被使用时,把它声明成静态方法会方便一些;第二,当被调用方法是非静态方法时,则必须先实例化一个对象,再进行方法调用。希望能够帮助到你。
例子
Ⅵ Python中的面向对象(进阶)
一、实例方法,类方法,静态方法
我们首先写一个类,里面包含这三种方法。
可以看到,我们用到了两个装饰器。
我们用类和实例分别调用下类方法
我们用类和实例分别调用下静态方法
静态方法其实就是把一个普通的函数写在类里,与直接在外层写一个函数是一样的,本质上是一个函数。
为了方便理解,我们分别打印下这些方法的类型
通过type()查看对象是方法还是函数
此外,还可以通过inspect模块判断某个对象是否是某种类型,返回布尔值。
用法
小Tips:概念理解
直接def定义的,我们叫做函数
把函数放到类里,我们叫做方法
方法可以通过装饰器staticmethod转为(放在方法里的)函数
继承
一个类继承另一个类时,会自动获得另一个类的所有属性和方法,被继承的类称之为父类,新类称为子类。子类拥有父类所有的属性和方法,并且可以定义自己的属性和方法
我们以上边的Rectangle类为父类来试一下
1)完全继承
可以看到,子类完全继承父类后,可以直接调用父类的所有方法。
2)部分继承
部分继承:继承父类后,修改父类的同名方法
我们试一下,Square继承Rectangle后,修改__init__()方法
3)拓展父类的方法
在保留父类中某个方法的代码同时,对方法进行拓展
可以在方法中加入"super().方法名"来实现
4)@property