新式类和经典类,类和对象的使用,如何基于面向对象开发软件
day27
新式类与经典类
在python3中,所有的类都是新式类:
class A: # python3默认继承object类 pass print(A.__bases__) # 查询继承类是什么,结果是 (<class 'object'>,)
在python2中,新式类:
class B(object): # 继承object类,python2里必须写,python3默认继承 pass class C(B): # 继承B类, pass print(B.__bases__) # 查询继承类是什么 .结果是 (<class 'object'>,) print(C.__bases__) # 结果是 (<class '__main__.B'>,)
python2中,经典类:
class D: # 什么也没继承 pass print(D.__bases__) # 在python2解释器中,结果什么也没有
类和对象的使用
class Student:
country = "China"
def __init__(self, ID, NAME, SEX, PROVINCE):
self.id = ID
self.name = NAME
self.sex = SEX
self.province = PROVINCE
def search_score(self):
print("tell score")
def study(self):
print("study")
def walk(self):
print("%s is walking." % (self.name))
# 类属性:特征(变量)和技能(函数、绑定方法),python的属性与其他语言不同
# 类的用法:实例化,属性引用
s1 = Student("124345463243223", "cobila", "female", "sahngxi")
print(Student.country)
print(Student.search_score)
print(Student.search_score(s1))
# 对象也称为实例
# 对象的属性:对象本身就是特征(变量)
# 对象的用法:属性引用
s2 = Student("2222222222", "cobila22", "female2", "sahngxi2")
print(s2.country)
s2.search_score()
s2.study()
print(Student.__dict__) # 查看类的名称空间,存到一个字典里的,结果如下:
# {'__module__': '__main__', 'country': 'China', '__init__': <function Student.__init__ at 0x0000020BB2D398C8>,
# 'search_score': <function Student.search_score at 0x0000020BB2D39950>, 'study': <function Student.study at 0x0000020BB2D399D8>,
# '__dict__': <attribute '__dict__' of 'Student' objects>, '__weakref__': <attribute '__weakref__' of 'Student' objects>, '__doc__': None}
print(s1.__dict__) # 查看对象的名称空间,存到一个字典里的,结果如下:
# {'id': '124345463243223', 'name': 'cobila', 'sex': 'female', 'province': 'sahngxi'}
# 对象寻找名字步骤: 1.先从对象自己的__dict__里找,2. 再从类的__dict__那里找
# 对于变量,对象和类调用变量都是引用的同一个内存地址
print(id(s1.country)) # 值为 1726078219744
print(id(s2.country)) # 值为 1726078219744
print(id(Student.country)) # 值为 1726078219744
# 对于绑定方法/函数,对象和类调用时内存地址不一样
print(s1.study,id(s1.study)) # 值为 <bound method Student.study of <__main__.Student object at 0x000001F47F7AF128>> 2149612792904
print(Student.study, id(Student.study)) # 值为 <function Student.study at 0x000001F47F7999D8> 2149622323672
# 绑定方法的核心在于“绑定”,唯一绑定一个确定的对象
s1.walk() # 结果:cobila is walking.
s2.walk() # 结果:cobila22 is walking.
如何基于面向对象开发软件
# 应用场景
# 找不到共同特征和技能不用强求
# 对象:学校-----》归类
# 共有的特征:商标为etiantian
# 共有的特征:招生
# 独有的特征:地址不一样,老师们,课程
class School:
tag = "etiantian"
def __init__(self, address):
self.address = address
self.teacher_list = []
self.course_list = []
def zhaosheng(self):
pass
# 对象:老师-----》归类
# 共同的特征:教课
# 独有的特征:名字,性别,level,课程
class Teacher:
def __init__(self, name, sex, level):
self.name = name
self.sex = sex
self.level = level
self.course_list = []
def teach(self):
pass
# 对象:学生-----》归类
# 共同的特征:
# 共同的技能:search_score, handin
# 独有的特征:学号,名字,性别,课程
class Student:
def __init__(self, ID, name, sex):
self.id = ID
self.name = name
self.sex = sex
self.course_list = []
def search_score(self):
pass
def handin(self):
pass
class Course:
def __init__(self, name, price, period):
self.name = name
self.price = price
self.period = period
s1 = Student("111111", "alex", "male")
print(s1.id, s1.name, s1.sex)
# s1.course_list.append("python")
# s1.course_list.append("linux")
# print(s1.course_list)
python_obj = Course("python", "1688元", "5个月")
linux_obj = Course("linux", "9800元", "6个月")
s1.course_list.append(python_obj)
s1.course_list.append(list)
print('''
name: %s
course: %s
price: %s
''' % (s1.name, s1.course_list[0].name, s1.course_list[0].price))

共有 0 条评论