例:
class testclass: data = 100 def setpdata(self, value): self.data = value def showpdata(self): print("data:", self.data) x = testclass() x.setpdata(123) x.showpdata() print(x.data)类对象 类对象支持两种操作:属性引用和实例化。
属性引用使用和 Python 中所有的属性引用一样的标准语法:obj.name。类对象创建后,类命名空间中所有的命名都是有效属性名。在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例。
类有一个名为 __ init__() 的特殊方法(构造方法),该方法在类实例化时会自动调用,像下面这样:
def __init__(self,value): self.data = value类有一个名为 __del __() 的特殊方法(析构方法),该方法在实例对象回收时会自动调用,像下面这样:
def __del__(self): del self.data其他方法 观察以下例子:
class test: def add(a, b): return a + b def add2(self, a, b): return a + b #通过类对象调用方法 print(test.add(2, 3)) #5 print(test.add2(2, 3, 4)) #7 #创建实例对象 x = test() print(x.add2(2, 3)) #5 print(x.add(2, 3)) #报错 通过类对象调用方法,只需要记住参数个数,add2()方法中2传给了self,但是self并没有使用,所以计算结果仍为7如果实例化对象,对象会和参数一同传递给方法,add()方法只有两个参数,所以报错解释一下self
self代表类的实例,而非类类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。通过实例对象调用方法时,当前实例对象作为一个参数传递进去self 代表的是类的实例,代表当前对象的地址,而 self.class 则指向类。self 不是 python 关键字,但是默认第一个参数个人认为self也就是java中的this指针格式如下:
class 类名(父类名): 赋值语句 赋值语句 ..... def语句定义函数 def语句定义函数 ..... 定义子类构造函数时注意添加: #调用父类的构函 父类.__init__(self,n,a,w)Python同样有限的支持多继承形式。多继承的类定义形如下例:
class 类名(父类名,父类名,父类名,父类名.....): 赋值语句 赋值语句 ..... def语句定义函数 def语句定义函数 ..... 需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。方法重写
子类重写你父类的方法super() 函数是用于调用父类(超类)的一个方法。类的私有属性 两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.属性名。 类的私有方法 两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用。self.方法名。
class Site: def __init__(self, name, url): self.name = name # public self.__url = url # private def who(self): print('name : ', self.name) print('url : ', self.__url) def __foo(self): # 私有方法 print('这是私有方法') def foo(self): # 公共方法 print('这是公共方法') self.__foo() x = Site('syc', 'www.syc.com') x.who() # 正常输出 x.foo() # 正常输出 x.__foo() # 报错Python3 中类的静态方法、普通方法、类方法
静态方法: 用 @staticmethod 装饰的不带 self 参数的方法叫做静态方法,类的静态方法可以没有参数,可以直接使用类名调用。普通方法: 默认有个self参数,且只能被对象调用。类方法: 默认有个 cls 参数,可以被类和对象调用,需要加上 @classmethod 装饰器。 class Classroom: @staticmethod def fun(): print("静态方法") @classmethod def fun1(cls): print("类方法") def fun2(self): print("普通方法") if __name__ == '__main__': x = Classroom() Classroom.fun() #静态方法 Classroom.fun() #静态方法 x.fun2() #普通方法类的专有方法:
__init __ : 构造函数,在生成对象时调用__del __ : 析构函数,释放对象时使用__repr __ : 打印,转换__setitem __ : 按照索引赋值__getitem __: 按照索引获取值__len __: 获得长度__cmp __: 比较运算__call __: 函数调用__add __: 加运算__sub __: 减运算__mul __: 乘运算__truediv __: 除运算__mod __: 求余运算__pow __: 乘方