经典类: class People:
新式类: class People(object):
新式类: class People(object):
区别主要体现在多继承上构造函数顺序问题:
python2:
经典类是按深度优先来继承的,新式类按广度优先来继承的
python3:
都是按照广度优先来继承
经典类是按深度优先来继承的,新式类按广度优先来继承的
python3:
都是按照广度优先来继承
多继承:
class People(object):
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self):
print("%s is eating ...." % self.name)
class Relation(object):
def make_friend(self, obj):
print("%s make friend with %s" % (self.name, obj.name))
class Men(People, Relation):
def __init__(self, name, age, momey):
#People.__init__(self, name, age)
super(Men, self).__init__(name, age)
self.momey = momey
def sleep(self):
print("%s is sleeping" % self.name)
class Wemen(People, Relation):
def xx(self):
print("===================")
t1 = Men("Brace", 29, 23)
t2 = Wemen("Lucy", 29)
t1.make_friend(t2)
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self):
print("%s is eating ...." % self.name)
class Relation(object):
def make_friend(self, obj):
print("%s make friend with %s" % (self.name, obj.name))
class Men(People, Relation):
def __init__(self, name, age, momey):
#People.__init__(self, name, age)
super(Men, self).__init__(name, age)
self.momey = momey
def sleep(self):
print("%s is sleeping" % self.name)
class Wemen(People, Relation):
def xx(self):
print("===================")
t1 = Men("Brace", 29, 23)
t2 = Wemen("Lucy", 29)
t1.make_friend(t2)
输出:
Brace make friend with Lucy
Brace make friend with Lucy
class People(object):
def __init__(self, name, age):
self.name = name
self.age = age
self.friends=[]
def eat(self):
print("%s is eating ...." % self.name)
class Relation(object):
def make_friend(self, obj):
print("%s make friend with %s" % (self.name, obj.name))
self.friends.append(obj)
class Men(People, Relation):
def __init__(self, name, age, momey):
#People.__init__(self, name, age)
super(Men, self).__init__(name, age)
self.momey = momey
def sleep(self):
print("%s is sleeping" % self.name)
class Wemen(People, Relation):
def xx(self):
print("===================")
t1 = Men("Brace", 29, 30)
#t1.sleep()
#print(t1.momey)
t2 = Wemen("Lucy", 29)
t1.make_friend(t2)
t2.name = "Kitty"
print(t1.friends[0].name)
输出:
Brace make friend with Lucy
Kitty
案例:
学校,讲师,学员
class School(object):
def __init__(self, name, addr):
self.name = name
self.addr = addr
self.students = []
self.staffs = []
def entrool(self, stu_obj):
print("为学员 %s 办理注册登记手续" % stu_obj.name)
self.students.append(stu_obj)
def hire(self, staff_obj):
print("%s 被雇佣为学校 %s 老师" % (staff_obj.name, self.name))
self.staffs.append(staff_obj)
class Schoolmembers(object):
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def tell(self):
pass
class Teachers(Schoolmembers):
def __init__(self, name, age, gender, salary, course):
super(Teachers,self).__init__(name, age, gender)
self.salary = salary
self.course = course
def tell(self):
print("""
======info of teacher: %s ========
name: %s
age: %s
gender: %s
Salary: %s
Course;%s
""" % (self.name, self.name, self.age, self.gender, self.salary, self.course))
def teach(self):
print("%s is teaching course [%s]" %(self.name, self.course))
class Students(Schoolmembers):
def __init__(self, name, age, gender, stu_id, grade):
super(Students, self).__init__(name, age, gender)
self.stu_id = stu_id
self.grade = grade
def tell(self):
print("""
======info of student: %s ========
name: %s
age: %s
gender: %s
stu_id: %s
grade;%s
""" % (self.name, self.name, self.age, self.gender, self.stu_id, self.grade))
def pay_tuition(self, amount):
print("%s has pay tution for $ %d" % (self.name, amount))
school = School("惊风学院", "北京朝阳区")
t1 = Teachers("Brace", 23, "Male", 20000, "Linux")
t2 = Teachers("Lucy", 25, "Female", 10000, "Python")
s1 = Students("Zhangsan",18, "male","10001", "python")
s2 = Students("Lisi",16, "female","10002", "Linux")
t1.tell()
s1.tell()
t2.tell()
s2.tell()
school.entrool(s1)
school.hire(t1)
school.entrool(s2)
school.hire(t2)
print(school.students)
print(school.staffs)
school.staffs[0].teach()
for stu in school.students:
stu.pay_tuition(5000)
输出:
======info of teacher: Brace ========
name: Brace
age: 23
gender: Male
Salary: 20000
Course;Linux
======info of student: Zhangsan ========
name: Zhangsan
age: 18
gender: male
stu_id: 10001
grade;python
======info of teacher: Lucy ========
name: Lucy
age: 25
gender: Female
Salary: 10000
Course;Python
======info of student: Lisi ========
name: Lisi
age: 16
gender: female
stu_id: 10002
grade;Linux
为学员 Zhangsan 办理注册登记手续
Brace 被雇佣为学校 惊风学院 老师
为学员 Lisi 办理注册登记手续
Lucy 被雇佣为学校 惊风学院 老师
[<__main__.Students object at 0x03B7CED0>, <__main__.Students object at 0x03B7CEF0>]
[<__main__.Teachers object at 0x03B7CE90>, <__main__.Teachers object at 0x03B7CEB0>]
Brace is teaching course [Linux]
Zhangsan has pay tution for $ 5000
Lisi has pay tution for $ 5000
======info of teacher: Brace ========
name: Brace
age: 23
gender: Male
Salary: 20000
Course;Linux
======info of student: Zhangsan ========
name: Zhangsan
age: 18
gender: male
stu_id: 10001
grade;python
======info of teacher: Lucy ========
name: Lucy
age: 25
gender: Female
Salary: 10000
Course;Python
======info of student: Lisi ========
name: Lisi
age: 16
gender: female
stu_id: 10002
grade;Linux
为学员 Zhangsan 办理注册登记手续
Brace 被雇佣为学校 惊风学院 老师
为学员 Lisi 办理注册登记手续
Lucy 被雇佣为学校 惊风学院 老师
[<__main__.Students object at 0x03B7CED0>, <__main__.Students object at 0x03B7CEF0>]
[<__main__.Teachers object at 0x03B7CE90>, <__main__.Teachers object at 0x03B7CEB0>]
Brace is teaching course [Linux]
Zhangsan has pay tution for $ 5000
Lisi has pay tution for $ 5000