1.类
python是面向对象的,python的类与java类似有属性和方法构成:如
1 2 3 4 5 6 7 8
| class Person: name = '张三' age = 30 def say(self): print(self.name + '说:我今年%d了' % self.age ) person = Person() person.say()
|
1.类的封装
如列表的排序方法sort()就是对排序的方法的封装,不需要关系方法里面具体的实现过程,
只需要调用别表封装好的方法即可实现排序功能
2.类的继承
Children类继承Person类,同时也继承了Person的name、age属性和say()方法
1 2 3 4
| class Children(Person): pass children = Children() children.say() # 张三说:我今年30了
|
Children重新定义自己的name和age属性
1 2 3 4 5 6
| class Children(Person): name = '张小二' age = 3 children = Children() children.say() # 张小二说:我今年3了
|
python中类可以多继承
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Mother: def say(self): print('母亲的一些方法') class Pather: def work(self): print('父亲的方法') class Child(Mother, Pather): pass child = Child() child.say() child.work()
|
3.类的多态
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Animal: def __init__(self,name,food): self.name = name self.food = food def eat(self): print(self.name + "说:我爱吃-----" + self.food) cat = Animal('猫','鱼') cat.eat() rabbit = Animal('兔子','胡萝卜') rabbit.eat() dog = Animal('狗','鱼和兔子') dog.eat()
|
2.类中变量私有与公有
1 2 3 4 5 6 7
| class Person: name = 'zhangsan' __age = 20 p = Person() print(p.name) print(p.age)
|
访问私有变量可以通过下面两种方法访问
1.在类中定义放回方法
1 2 3 4 5 6 7 8
| class Person: name = 'zhangsan' __age = 20 def getAge(self): return self.__age p = Person() print(p.getAge())
|
2.通过类名 + 变量名访问
3.类、类对象和实例对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| class Count: num = 0 a = Count() b = Count() c = Count() print('a---b---c 的num分别为:' + str(a.num) + ',' + str(b.num ) + ',' + str(c.num)) a.num = 10 print('a---b---c 的num分别为:' + str(a.num) + ',' + str(b.num ) + ',' + str(c.num)) Count.num = 100 print('a---b---c 的num分别为:' + str(a.num) + ',' + str(b.num ) + ',' + str(c.num))
|
4.类的一些内置方法
1.issubclass(a,b) 判断a是否b的子类
1 2 3 4 5 6 7 8 9
| class A: pass class B(A): pass class C: pass print(issubclass(A,object)) print(issubclass(B,A)) print(issubclass(C,B))
|
2.instance(object,classinfo) 判断object是否为classinfo的对象
1 2 3 4 5 6 7 8 9 10 11
| class A: pass class B(A): pass class C: pass b = B() print(isinstance(b,A)) print(isinstance(b,B)) print(isinstance(b,C)) print(isinstance(b,(A,B,C)))
|
3.hasattr(object,name) 判断object对象是否有name属性
1 2 3 4 5 6 7 8 9 10 11 12 13
| class A: def __init__(self,num = 0): self.num = num a = A() print(hasattr(a,'num')) setattr(a,'name','张三') print(getattr(a,'name','不存在name属性')) print(getattr(a,'age','不存在age属性')) print(delattr(a,'name'))
|
4.property(fget=None,fset=None,fdel=None,doc=None)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class A: def __init__(self,num = 0): self.num = num def getNum(self): return self.num def setNum(self,value): self.num = value def delNum(self): del self.num x = property(getNum,setNum,delNum) a = A() print(a.getNum()) print(a.x) a.x = 30 print(a.getNum()) print(a.x) del a.x
|