1.类
python是面向对象的,python的类与java类似有属性和方法构成:如
class Person:
name = '张三'
age = 30
def say(self):
print(self.name + '说:我今年%d了' % self.age )
person = Person()
person.say() # 张三说:我今年30了
1.类的封装
如列表的排序方法sort()就是对排序的方法的封装,不需要关系方法里面具体的实现过程,
只需要调用别表封装好的方法即可实现排序功能
2.类的继承
Children类继承Person类,同时也继承了Person的name、age属性和say()方法
class Children(Person):
pass
children = Children()
children.say() # 张三说:我今年30了
Children重新定义自己的name和age属性
class Children(Person):
name = '张小二'
age = 3
children = Children()
children.say() # 张小二说:我今年3了
python中类可以多继承
class Mother:
def say(self):
print('母亲的一些方法')
class Pather:
def work(self):
print('父亲的方法')
class Child(Mother, Pather): # 孩子类即继承了母亲的一些方法也继承了父亲的方法
pass
child = Child()
child.say()
child.work()
3.类的多态
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.类中变量私有与公有
class Person:
name = 'zhangsan'
__age = 20 # 私有变量
p = Person()
print(p.name)
print(p.age) # error 私有变量这样是访问不到的
访问私有变量可以通过下面两种方法访问
1.在类中定义放回方法
class Person:
name = 'zhangsan'
__age = 20 # 私有变量 __为两个下划线_ _
def getAge(self):
return self.__age
p = Person()
print(p.getAge()) # 20
2.通过类名 + 变量名访问
print(p._Person__age) # 20
3.类、类对象和实例对象
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---b---c 的num分别为:0,0,0
a.num = 10
print('a---b---c 的num分别为:' + str(a.num) + ',' + str(b.num ) + ',' + str(c.num))
# a---b---c 的num分别为:10,0,0
Count.num = 100
print('a---b---c 的num分别为:' + str(a.num) + ',' + str(b.num ) + ',' + str(c.num))
# a---b---c 的num分别为:10,100,100
4.类的一些内置方法
1.issubclass(a,b) 判断a是否b的子类
class A:
pass
class B(A):
pass
class C:
pass
print(issubclass(A,object)) # True
print(issubclass(B,A)) # True
print(issubclass(C,B)) # False
2.instance(object,classinfo) 判断object是否为classinfo的对象
class A:
pass
class B(A):
pass
class C:
pass
b = B()
print(isinstance(b,A)) # True
print(isinstance(b,B)) # True
print(isinstance(b,C)) # False
print(isinstance(b,(A,B,C))) # True
3.hasattr(object,name) 判断object对象是否有name属性
class A:
def __init__(self,num = 0): # num 必须初始化
self.num = num
a = A()
print(hasattr(a,'num')) # True
# 给a对象设置name属性,设置默认值为张三
setattr(a,'name','张三')
# 得到 a 对象中的 name 属性,如果不存在,返回第三个提示参数设置的提示信息
print(getattr(a,'name','不存在name属性')) # 张三
print(getattr(a,'age','不存在age属性')) # 不存在age属性
# 删除a中的name属性,如果不存在报错,可先hasattr判断是否存在
print(delattr(a,'name')) # None
4.property(fget=None,fset=None,fdel=None,doc=None)
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)
# 通过x设置属性
a.x = 30
print(a.getNum())
print(a.x)
# 删除属性
del a.x