08类和对象

# -*- coding: utf-8 -*-
#===============================================================================
#第八章 类和对象

'''
目录
8.1 对象的魔法
8.2 类
8.2.1 创建自己的类
8.2.2 方法和私有化
8.2.3 类代码块
8.2.4 类的继承
8.2.5 检测继承关系
8.2.6 多继承
8.2.7 接口
'''


# 8.1对象的魔法

#===============================================================================
# 对象object可以看做数据以及可以操作这些数据的一系列方法的集合
#继承:当前类从其他类获得数据,以便更好地代码重用,并且可以描述类与类之间的关系
#封装:对外部世界隐藏对象的工作细节
#多态:同一个对象的同样的操作方法在不同的场景会有不同的行为
#===============================================================================


#8.2类

#===============================================================================
# #8.2.1创建自己的类
# 1。定义类:使用class关键字。后面跟上类名,结尾使用冒号:。。类也是代码块
# 2。每个方法的第一个参数必须都是self,名字可以变,但是作用不变,作用是:
# 不需要传递值,系统会将方法所属的对象传入这个参数。
# 方法内部可以利用这个参数调用对象本身的资源,如属性、方法等。
# 3。person2.name='Two'与person2.setName('Two')都是为Person类的name属性赋值,效果是完全一样的
# 4。使用类创建对象的方式与调用函数的方式相同。使用类型加上构造方法参数值即可
# 5。调用对象的两种方式:
# 直接通过对象变量调用方法:person1=PresonOne() person1.setName('One')
# 通过类调用方法,并且将相应的对象传入方法的第一个参数:person2=PresonOne() PresonOne.greet(person2)
#===============================================================================
'''
#创建类:
class PresonOne:
#定义setName方法
def setName(self,name):
self.name=name
#定义getName方法
def getName(self):
return self.name
#定义greet方法
def greet(self):
print('Hello,I"m {name}.'.format(name=self.name))
#创建对象
person1=PresonOne()
person2=PresonOne()
#调用person1()对象的方法
person1.setName('One')
#调用person2()对象的name属性
person2.name='Two'
#调用person1()对象的方法
print(person1.getName())
person1.greet()
#调用person2()对象的name属性
print(person2.name)
#调用person2()对象的方法
PresonOne.greet(person2)
'''

#===============================================================================
#8.2.2方法和私有化
#Python类默认情况下,所有的方法都可以被外部访问
#方法私有化:在方法前面加两个下划线(__):def __a():
#私有化的方法也能调用:类._PersonName__methonName()
#类的内部可以直接调用私用方法
#===============================================================================

#===============================================================================
# #8.2.3类代码块
# 定义类就是执行代码块
# 代码块可以包含任何语句,如果是立即可以执行的,那么就会立即执行,
# 还可以动态向class代码块中添加新的成员:person1.age=18,那么age会成为类的属性
#===============================================================================

#===============================================================================
# #8.2.4类的继承
# 子类可以从父类中获得所有的成员,这些成员可以在子类中使用,就像子类本身的成员
# 父类需要放在子类名后的圆括号中
# 父类:class Faperson:
# 子类:class Sonperson(Faperson):
# 子类拥有父类所有成员,包括方法,在创建子类的对象后,可以直接调用父类的方法
#===============================================================================

#===============================================================================
# #8.2.5检测继承关系
# 有时候为了能在类B中调用类A的成员,需要检测类B是否是类A的子类
# 判断类与类的关系用函数issubclass,它有两个参数:
# 如果第一个是子类的对象,第二个是父类,返会True;否则返回False
# 如果知道类B是子类,想知道它的父类是谁,有两种方法
# 1.未知类名。可以使用(__bases__),左右两侧都是双下划线
# 如:print(B.__bases__) 结果:<class '__main__.A'>
# 2.已知类名。可以使用isinstance函数,它有两个参数:
# 第一个参数是子类,第二个类是已知类名。如果是子类的父类,返回True,否则返回False
# 如:print(isinstance(B,A)) 结果:A是父类就返回True,否则返回False
# 间接继承也会返回True,如:B继承自A,A继承自S,那么isinstance(B,S)的结果也是True
#===============================================================================

#===============================================================================
# #8.2.6多继承
# 一个类可以继承自多个父类,需要在类后面的括号里写上父类名,用逗号隔开
# 父类:class Faperson:
# class Fbperson:
# 子类:class Sonperson(Faperson,Fbperson):
# 如果几个父类中有同名的属性或者方法,那么写在前面的父类里面的成员会覆盖后面的
#===============================================================================

#===============================================================================
# #8.2.7接口
# Python中不存在接口,可以用hasattr检测对象中是否存在某个成员
# hasattr(c, 'name') c是一个对象,如果c中有name方法,则返回True。否则返回False
# getattr函数也能判断对象中是否存在某个成员,有三个参数:
# getattr(对象,成员,默认值) 成员存在则返回成员,成员不存在则返回默认值
# setattr函数用来设置对象中成员的值,有三个参数
# setattr(对象,成员,成员的值) 成员存在,会更新成员的值,成员不存在,会添加成员并且赋值
#===============================================================================


'''
#练习题
#1.创建三个类:父类Person,子类Teacher和Student,方法任意指定,演示继承关系
class Person:
def xiaozhang(self):
print('我是校长')
class Teacher(Person):
def teacher(self):
print('我是老师')
class Student(Person):
def student(self):
print('我是学生')
person1=Person()
tacher1=Teacher()
student1=Student()
print(Teacher.__bases__)
print(isinstance(student1, Person))
#2.在1的基础上,在调用Student中不存在的方法时,使用setattr函数添加一个新方法,然后在调用Student类的这个方法
def addOne():
print('我是新添加的方法。')
setattr(student1, 'addOne', addOne)
student1.addOne()
'''

猜你喜欢

转载自www.cnblogs.com/zengsen666/p/12093413.html
今日推荐