类变量与实例变量构造函数
__author__ = 'meng'
class Foo:
#n = 12345 #类变量
def __init__(self, name, age):
# 构造函数
# 在实例化时做一些类的初始化工作
self.name = name #实例变量(静态属性),作用域就是实例本身
self.age = age
def shot(self): #类的方法功能(动态属性)
print ('%s.......' %(self.name))
obj = Foo('nick', 18) #实例化类 Foo,
print (obj.name) #调用
print (obj.age)
print (obj.shot())
obj2 = Foo('jenny', 21)
print (obj2.name)
print (obj2.age)
私有方法
一个python函数或类方法以两个下划线开始(不是结束),他是私有的,私有方法不能在类以外调用,只能在类内部调用。
__author__ = 'meng'
class Person:
def __init__(self,name):
self.name = name
print (self.name)
def __work(self,salary):
print ("%s salary is: %d"%(self.name,salary))
def worker(self):
self.__work(500) #在类内部调用私有方法
if __name__=="__main__":
officer = Person("Jack")
#officer.__work(1000) #会报错
officer.worker()
继承
python3中的类都是新式类。
继承的好处一:减少冗余代码
在子类定义新的属性,覆盖掉父类的属性,称为派生。
class Animal:
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
def eat(self):
print('eating')
def talk(self):
print('%s 正在叫' %self.name)
class People(Animal):
def __init__(self, name, age, sex,education):
Animal.__init__(self,name,age,sex)
self.education=education
def talk(self):
Animal.talk(self)
print('%s say hello' %self.name)
class Pig(Animal):
pass
class Dog(Animal):
pass
peo1=People('alex',18,'male','小学肄业') #People.__init__
pig1=Pig('wupeiqi',20,'female')
dog1=Dog('yuanhao',30,'male')
print(peo1.education)
peo1.talk()
pig1.talk()
dog1.talk()
输出结果:
小学肄业
alex 正在叫
alex say hello
wupeiqi 正在叫
yuanhao 正在叫
经典类:深度优先,F->D->B->A->E->C->H
新式类:广度优先,F->D->B->E->C->H->A


经典类深度优先:
class A: def test(self): print('from A') class B(A): # def test(self): # print('from B') pass class C(A): # def test(self): # print('from C') pass class D(B): # def test(self): # print('from D') pass class E(C): # def test(self): # print('from E') pass class F(D,E): # def test(self): # print('from F') pass f=F() f.test() 输出结果: from A
新式类广度优先:
class A: def test(self): print('from A') pass class B(A): # def test(self): # print('from B') pass class C(A): # def test(self): # print('from C') pass class D(B): # def test(self): # print('from D') pass class E(C): # def test(self): # print('from E') pass class H(A): # def test(self): # print('from H') pass class F(D,E,H): # def test(self): # print('from F') pass f=F() f.test()
子类调用父类的方法
第一种方法不推荐,父类名字改变,子类也要跟着改。
推荐第二种super(),python3中直接可以super().test()调用父类Foo1的test方法,python2中需要super(Bar,self).test()调用。


多态与多态性
多态:同一种事物的多种形态。
class Animal:
def talk(self):
print('正在叫')
class People(Animal): #动物的形态之一人
def talk(self):
print('say hello')
class Pig(Animal): #动物的形态之一猪
def talk(self):
print('哼哼哼')
class Dog(Animal): #动物的形态之一狗
pass
多态性:
class Animal:
def talk(self):
print('正在叫')
class People(Animal):
def talk(self):
print('say hello')
class Pig(Animal):
def talk(self):
print('哼哼哼')
class Dog(Animal):
def talk(self):
print('汪汪汪')
class Cat(Animal):
def talk(self):
print('喵喵喵')
peo1=People()
pig1=Pig()
dog1=Dog()
cat1=Cat()
#多态性
# peo1.talk()
# dog1.talk()
# pig1.talk()
def func(x):
x.talk()
func(peo1)
func(pig1)
func(dog1)
func(cat1)
输出结果:
say hello
哼哼哼
汪汪汪
喵喵喵