宜宾建设教育培训中心网站,服装微信商城网站建设,怎么做网站seo优化,网站前期准备工作1.类和对象 是不是很熟悉#xff1f;和Java一样#xff0c;在Python中#xff0c;都可以把万物看成(封装成)对象。它俩都是面向对象编程
1.1 查看对象数据类型
a 10
b 9.8
c helloprint(type(a))
print(type(b))
print(type(c))运行结果#xff1a;
D:\Python_Home\v…1.类和对象 是不是很熟悉和Java一样在Python中都可以把万物看成(封装成)对象。它俩都是面向对象编程
1.1 查看对象数据类型
a 10
b 9.8
c helloprint(type(a))
print(type(b))
print(type(c))运行结果
D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap9\示例9-1查看对象的数据类型.py
class int
class float
class str1.2 自定义数据类型
# 编写一个 Person
class Person():pass# 编写一个 Cat 类
class Cat():pass# 编写一个 Dog 类
class Dog:passclass Student:pass
1.3 创建自定义类型的对象
# 编写一个 Person
class Person():pass# 编写一个 Cat 类
class Cat():pass# 编写一个 Dog 类
class Dog:passclass Student:pass#创建类的对象
# 对象名类名()# 创建一个 Person 类型的对象
perPerson()
cCat()
dDog()
stuStudent()print(type(per))
print(type(c))
print(type(d))
print(type(stu))运行结果
D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap9\示例9-3创建自定义类型的对象.py
class __main__.Person
class __main__.Cat
class __main__.Dog
class __main__.Student1.4 类属性和实例属性的定义
class Student:# 类属性 定义在类中方法外的变量school 北京大学# 初始方法方法def __int__(self, xm, age): # xmage 是方法的参数是局部变量,作用域 是 整个 __init__方法self.name xm # 左侧是实例属性 xm是局部变量将局部变量的值 xm 赋值给实例属性 self.nameself.age age # 实例的名称和局部变量的名称可以相同1.5 类的组成
class Student:# 类属性 定义在类中方法外的变量school 北京大学# 初始方法方法def __init__(self, xm, age): # xmage 是方法的参数是局部变量,作用域 是 整个 __init__方法self.name xm # 左侧是实例属性 xm是局部变量将局部变量的值 xm 赋值给实例属性 self.nameself.age age # 实例的名称和局部变量的名称可以相同# 定义在类中的函数成为方法自带一个 参数 selfdef show(self):print(f我叫:{self.name},今年{self.age}岁了)# 静态方法staticmethoddef sm():# print(self.name)# self.show()print(这是一个静态方法不能调用实例属性也不能调用实例方法)# 类方法classmethoddef cm(cls): # cls-- class 的简写print(这是一个类方法不能调用实例属性也不能调用实例方法)# 创建类的对象
stu Student(Jarvis, 21) # 为什么传了两个参数因为 __init__ 方法中有两个形参 self 是自带的参数无需手动传入# 实例属性使用对象名 进行打点调用
print(stu.name,stu.age)#类属性直接使用 类名打点调用
print(Student.school)#示例方法使用对象名 打点调用
stu.show()# 类方法 classmethod 进行修饰的方法直接使用类名打点调用
Student.cm()# 静态方法 ,直接使用 类名打点调用
Student.sm()
1.6 编写学生类创建4个学生对象
class Student:# 类属性 定义在类中方法外的变量school 北京大学# 初始方法方法def __init__(self, xm, age): # xmage 是方法的参数是局部变量,作用域 是 整个 __init__方法self.name xm # 左侧是实例属性 xm是局部变量将局部变量的值 xm 赋值给实例属性 self.nameself.age age # 实例的名称和局部变量的名称可以相同# 定义在类中的函数成为方法自带一个 参数 selfdef show(self):print(f我叫:{self.name},今年{self.age}岁了)# 根据 图纸 可以创建出 N多个对象
stu Student(jarvis, 18)
stu2 Student(zhangsan, 19)
stu3 Student(lisi, 20)
stu4 Student(wangwu, 21)print(type(stu))
print(type(stu2))
print(type(stu3))
print(type(stu4))Student.school 清华大学 # 给类的属性赋值# 将学生对象存储到列表中
lst [stu, stu2, stu3, stu4] # 列表中的元素是 Student类型的对象
for item in lst:item.show() # 对象打点调用实例方法
运行结果
D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap9\示例9-6编写学生类创建4个学生对象.py
class __main__.Student
class __main__.Student
class __main__.Student
class __main__.Student
我叫:jarvis,今年18岁了
我叫:zhangsan,今年19岁了
我叫:lisi,今年20岁了
我叫:wangwu,今年21岁了1.7 动态绑定属性和方法 代码
class Student:# 类属性 定义在类中方法外的变量school 北京大学# 初始方法方法def __init__(self, xm, age): # xmage 是方法的参数是局部变量,作用域 是 整个 __init__方法self.name xm # 左侧是实例属性 xm是局部变量将局部变量的值 xm 赋值给实例属性 self.nameself.age age # 实例的名称和局部变量的名称可以相同# 定义在类中的函数成为方法自带一个 参数 selfdef show(self):print(f我叫:{self.name},今年{self.age}岁了)# 创建两个 Student 类型的对象
stu Student(jarvis, 18)
stu2 Student(zhangsan, 19)print(stu.name,stu.age)
print(stu2.name,stu2.age)# 为 stu2 动态绑定一个实例属性
stu2.gender男
print(stu2.name,stu2.age,stu2.gender)#动态绑定 方法
def introduce():print(我是一个普通的函数我被动态绑定成了 stu2对象的方法)stu2.funintroduce() #函数的一个赋值,(记住方法千万不能加小括号加小括号就是调用了)
# fun就是stu2对象的方法#调用
stu2.fun运行结果
D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap9\示例9-7动态绑定属性和方法.py
jarvis 18
zhangsan 19
zhangsan 19 男
我是一个普通的函数我被动态绑定成了 stu2对象的方法2.面向对象三大特征
封装继承多态
是的和Java一样 2.1 封装-权限控制 代码
class Student():#首位双下划线def __init__(self,name,age,gender):self._namename # self._name 受保护的只能本类和子类访问self.__ageage # self.__age 表示私有的只能类本身去访问self.gendergender #普通的实例属性类的内部外部及子类都可以访问def _fun1(self):print(子类及本身可以访问)def __fun2(self):print(只有定义的类可以访问)def show(self): #普通的实例方法self._fun1() #类本身访问受保护的方法self.__fun2() #类本身访问私有方法print(self._name) #受保护的实例属性print(self.__age) #私有的实例属性#创建一个学生对象
stuStudent(jarvis,23,男)# 类的外部
print(stu._name)
#print(stu.__age) # AttributeError: Student object has no attribute __age. Did you mean: _name?#调用受保护的实例方法
stu._fun1()#私有方法
#stu.__fun2() #AttributeError: Student object has no attribute __fun2. Did you mean: _fun1?# 私有的实例属性 和 方法是真的不能访问吗私有的实例属性 和 方法是真的不能访问吗
print(stu._Student__age) #为什么可以这样访问呢stu._Student__fun2()为什么可以这样访问呢
我们可以用dir()方法查看类所有的方法
print(dir(stu))运行结果
D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap9\示例9-8权限控制.py
jarvis
子类及本身可以访问
23
只有定义的类可以访问
[_Student__age, _Student__fun2, __class__, __delattr__, __dict__, __dir__, __doc__, __eq__, __format__, __ge__, __getattribute__, __getstate__, __gt__, __hash__, __init__, __init_subclass__, __le__, __lt__, __module__, __ne__, __new__, __reduce__, __reduce_ex__, __repr__, __setattr__, __sizeof__, __str__, __subclasshook__, __weakref__, _fun1, _name, gender, show]2.1.1 属性的设置
class Student:def __init__(self,name,gender):self.namenameself.__gendergender # self.__gender 是私有的实例属性# 使用 property 修饰方法将方法转成属性使用propertydef gender(self):return self.__gender#将我们的 gender 这个属性设置为可写属性gender.setterdef gender(self,value):if value!男 and value!女:print(性别有误已将性别默认设置为男)self.__gender男else:self.__gendervalue#
stuStudent(zhangsan,男)
print(stu.name,性别是,stu.gender) # stu.gender 就会去执行 stu.gender()# 尝试修改属性值
#stu.gender女 # AttributeError: property gender of Student object has no setterstu.gender其他
print(这个学生的性别是:,stu.gender)
运行结果
D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap9\示例9-9属性的设置.py
zhangsan 性别是 男
性别有误已将性别默认设置为男
这个学生的性别是: 男2.2 继承
继承 代码
class Person: # 默认继承了 objectdef __init__(self, name, age):self.name nameself.age agedef show(self):print(f大家好我叫{self.name},我今年{self.age}岁)# Student 继承 Person 类
class Student(Person):# 编写初始化的方法def __init__(self, name, age, stuno):super().__init__(name, age) # 调用父类的初始化方法self.stuno stuno# Doctor 继承Person 类
class Doctor(Person):# 编写初始化方法def __init__(self, name, age, department):super().__init__(name, age)self.department department# 创建第一个子类对象
stu Student(Jarvis, 20, 1001)
stu.show()doctor Doctor(zhangsan, 35, 外科)
doctor.show()运行结果
D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap9\示例9-10继承.py
大家好我叫Jarvis,我今年20岁
大家好我叫zhangsan,我今年35岁多继承
class FatherA():def __init__(self, name):self.name namedef showA(self):print(父类A中的方法)class FatherB():def __init__(self, age):self.age agedef showB(self):print(父类B中的方法)class Son(FatherA, FatherB):def __init__(self, name, age, gender):# 需要调用两个父类的初始化方法FatherA.__init__(self, name)FatherB.__init__(self, age)self.gender gendersonSon(Jarvis,22,男) # 调用Son类中的 __init__执行
son.showA()
son.showB()运行结果
D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap9\示例9-11多继承.py
父类A中的方法
父类B中的方法