PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域
类的名字首字母必须要大写
class Student(如果继承的话,写父类,否则为空):
pass
import random as r
class Fish:
def._init_(self):
self.x=random(1,10)
self.y=random(1,10)
def.move(self):
self.x-=1
print("我的位置是",self.x,self.y)
class Goldfish
pass
class shark(Fish):
def._init_(self):
super._init_(self)//对父类属性的初始化
self.hungry=True//加上子类的属性
def eat(self):
if self.hungry:
print("吃饱啦")
self.hungry=False
else:
print("太撑了,吃不下啦")
student = Student()
由于类起到模板的作用,因此,可以在创建实例的时候,把我们认为必须绑定的属性强制填写进去。这里就用到Python当中的一个内置方法__init__方法,例如在Student类时,把name、score等属性绑上去:
class Student(object):
def __init__(self, name, score)://加上了name和score属性
self.name = name
self.score = score
>>>student = Student("Hugh", 99)//实例化传参之后的对象,self不用写
>>>student.name
"Hugh"
>>>student.score
99
(1)、__init__方法的第一参数永远是self
表示创建的类实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。
(2)、有了__init__方法 在创建实例的时候,就不能传入空的参数了,
必须传入与__init__方法匹配的参数,但self不需要传,Python解释器会自己把实例变量传进去:
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
如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问,所以,我们把Student类改一改:
//self.name 代表整个类里边的变量,name表示外边传进来的变量
class Student(object):
def __init__(self, name, score):
self.__name = name
self.__score = score
def print_score(self):
print "%s: %s" %(self.__name,self.__score)
改完后,对于外部代码来说,没什么变动,但是已经无法从外部访问实例变量.__name和实例变量.__score了:
>>> student = Student('Hugh', 99)
>>> student.__name
Traceback (most recent call last):
File "" , line 1, in <module>
AttributeError: 'Student' object has no attribute '__name'
这样就确保了外部代码不能随意修改对象内部的状态,这样通过访问限制的保护,代码更加健壮。
但是如果外部代码要获取name和score怎么办?可以给Student类增加get_name和get_score这样的方法:
class Student(object):
...
def get_name(self):
return self.__name
def get_score(self):
return self.__score
如果又要允许外部代码修改score可以给Student类增加set_score方法:
def set_score(self, score):
self.__score = score
1、属性中的self
self.name 代表整个类里边的变量,name表示外边传进来的变量 即把传入的外部变量,赋到类中的内部变量中去
2、方法中的变量,def get_score(self):
是为了实例化多个对象时,标识对象本身
比如说定义一个水池类,水池里面有鱼和乌龟
class Turtle:
def._init_(self,x):
self.num=x
class fish:
def._init_(self,y):
self.num=y
class pool:
def._init_(self,x,y):
self.turtle=Turtle(x)
self.fish=Fish(y)
def.whatpool(self,x,y):
print("水池里面有%d只鱼和%d只乌龟,"%(self.fish.num,self.Turtle.num))
pool=new pool(1,10)
pool.whatpool()
issubclass(B,object)
true
检测一个实例对象是否属于一个类
测定一个对象是否有某个属性(name要以字符串的形式,否则函数会以为x是一个变量)
返回该对象中该参数的指定值
class A:
def._init_(x):
self.x=x
getattr(A,'x',"您所访问的属性不存在")
1,improt 模块名
调用:模块名.功能名
2,import 模块名 as 别名
调用:别名.功能名
3,from 模块名 import 功能名
调用:直接功能名
4,from 模块名 import 功能名 as 别名
调用: 直接拿别名来用
5,from 模块名 import*
(用 * 号 一次性导入所有功能)
调用:直接功能名 注意点:* 号没法用别名
让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行。
#module.py
def main():
print "we are in %s"%__name__
if __name__ == '__main__':
main()
这个函数定义了一个main函数,我们执行一下该py文件发现结果是打印出”we are in main“,说明我们的if语句中的内容被执行了,调用了main():
但是如果我们从另我一个模块导入该模块,并调用一次main()函数会是怎样的结果呢
from module import main
main()
其执行的结果是:we are in module
但是没有显示”we are in main“,也就是说模块__name__ = ‘main’ 下面的函数没有执行。
这样既可以让“模块”文件运行,也可以被其他模块引入,而且不会执行函数2次。这才是关键。
总结(部分代码的执行与否)
如果我们是直接执行某个.py文件的时候,该文件中那么”name == ‘main’“是True,但是我们如果从另外一个.py文件通过import导入该文件的时候,这时__name__的值就是我们这个py文件的名字而不是__main__。
这个功能还有一个用处:调试代码的时候,在”if name == ‘main’“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行!