Python面向对象
Python从设计之初就已经是一门面向对象的语言
Python类:
1)类定义:
class 类名: def __init__(self, 参数, ...): # 构造函数,只在生成类的实例时被调用一次 ... def 方法名1(self, 参数, ...): # 方法1,方法的第一个参数是self,表示自身的实例 ... def 方法名2(self, 参数, ...): # 方法2 ...
实例化类:ClassName()
类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性
类有一个名为 __init__() 的特殊方法(构造方法),该方法在类实例化时会自动调用
2)类实例方法
在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例,代表当前对象的地址,而self.class则指向类。
3)继承
子类的定义语法如下:
class sonClassName(fatherClassName1,fatherClassName2,fatherClassName3): <statement-1> . . . <statement-N>
子类会继承父类的属性和方法
4)类的私有属性
__ filed:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用self.__field访问。
5)类的私有方法
__method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用,不能在类的外部调用。调用方式self.__method。
#!/usr/bin/python3 #类定义 class people: #定义基本属性 name = '' age = 0 #定义私有属性,私有属性在类外部无法直接进行访问 __weight = 0 #定义构造方法 def __init__(self,n,a,w): self.name = n self.age = a self.__weight = w def speak(self): print("%s 说: 我 %d 岁。" %(self.name,self.age)) # 实例化类 p = people('runoob',10,30) p.speak()
6)类静态方法和类方法
一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。
而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用
class A(object): # 静态方法,既可以作为类的方法使用,也可以作为类的实例的方法使用 @staticmethod def foo1(name): print 'hello', name # 类的实例方法 def foo2(self, name): print 'hello', name # 类方法,cls作为第一个参数用来表示类本身. 在类方法中用到,类方法是只与类本身有关而与实例无关的方法,既可以作为类的方法使用,也可以作为类的实例的方法使用 @classmethod def foo3(cls, name): print 'hello', name)
Python静态方法和类方法的区别:
静态方法:使用@staticmethod注解修饰,不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样;如果在静态方法中要调用到这个类的一些属性方法,只能直接类名.属性名或类名.方法名
类方法:使用@classmethod注解修饰,也不需要self参数,但第一个参数需要是表示自身类的cls参数;因为持有cls参数,可以来调用类的属性,类的方法,实例化对象等,避免硬编码
self和cls的区别:
self 作为实例方法的第一个参数,表示当前类的实例
cls 作为类方法的第一个参数,表示当前类
END.