这里要考虑的重要事项是您正在使用的变量和/或函数名称的范围。 全局范围意味着
一切都可以看到它,无论是在顶层,在函数内部,还是在一个类中的方法内部。
本地范围意味着它已锁定在该块的上下文中,并且块外的任何内容都无法看到它。在
您的情况下,该块是一个函数。
1、以Student类为例,在Python中,定义类如下:
class Student(object):
pass
2、实例:定义好了类,就可以通过Student类创建出Student的实例,创建实例是通过类
名+()实现:
student = Student()
3.类起模板作用,属性写死,属性也可成变量方法:
Python当中的一个内置方法__init__方法,例如在Student类时,把name、score等属性绑
上去:
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
实际应用:
>>>student = Student("Hugh", 99)
>>>student.name
"Hugh"
>>>student.score
99
4、在类中的函数调用类中的属性。
既然Student类实例本身就拥有这些数据,那么要访问这些数据,就没必要从外面的
函数去访问,而可以直接在Student类的内部定义访问数据的函数(方法)
class Student(obiect):
def __init__(self, name, score):
self.name = name
self.score = score
def print_score(self):
print "%s: %s" % (self.name, self.score)
>>>student = Student("Hugh", 99)
>>>student.print_score
Hugh: 99
5、self代表类的实例
(1)self代表的是类的实例。而self.__class__则指向类。
class Test:
def ppr(self):
print(self)
print(self.__class__)
t = Test()
t.ppr()
执行结果:
<__main__.Test object at 0x000000000284E080>
注意:把self换成this,结果也一样,但Python中最好用约定俗成的self。
在Python解释器的内部,当我们调用t.ppr()时,实际上Python解释成Test.ppr(t),
【报错】的例子如下:
class Test:
def ppr():
print(self)
t = Test()
t.ppr()
命令行如下:
Traceback (most recent call last):
File "cl.py", line 6, in
t.ppr()
TypeError: ppr() takes 0 positional arguments but 1 was given
运行时提醒错误如下:ppr在定义时没有参数,但是我们运行时强行传了一个参数。
由于上面解释过了t.ppr()等同于Test.ppr(t),所以程序提醒我们多传了一个参数t。
(2)不用self,类中函数参数不一定要必须有self,【1】有参数可以使用
@classmethod类方法【2】无参数直接调用
【1】中的
class Test:
@classmethod
def ppr(cls):
print(__class__)
Test.ppr()、、
运行结果:
【2】中的
class Test:
@classmethod
def ppr():
print(__class__)
Test.ppr()
运行结果:
同一个类中同级函数的相互调用:
class DemoSpider(scrapy.Spider):
def parse(self, response):
self.slideBlank()
def slideBlank(self):
pass