类与对象
'''
类与对象的定义
python中利用class关键字来定义类,一个类中可以定义若干个属性和方法。在类中定义的方法使用def 关键字声明即可
'''
class Member:
'''
定义信息设置方法,该方法需要接受name与age两个参数的内容
'''
def set_info(self,name,age):
'''
:param name: 参数name
:param age: 参数age
:return:
'''
self.name =name #为类中的方法定义实例属性
self.age=age #为类中的方法定义实例属性
def get_info(self):
'''
获取类中属性内容
:return:
'''
return '姓名:%s\n年龄:%d' %(self.name,self.age) #返回对象信息
#实例化对象并调用类中的方法
if __name__ == '__main__':
num=Member()
num.set_info('刘洋',18)
print(num.get_info())
>封装性
'''
面向对象之中属性封装是第一大特性,属性封装之后就不能被外面所访问,可以被内部访问
'''
'''
实例:属性封装与访问
'''
class Member:
def set_name(self,name): #设置name属性方法
self.__name=name # 为name属性赋值
def set_age(self,age): #设置age属性方法
self.__age=age #为age属性赋值
def get_name(self): #获取name属性的方法
return self.__name #返回封装属性内容
def get_age(self): #获取age属性的方法
return self.__age # 返回封装属性内容
def main(): #主函数
men=Member() #实例化Member对象
men.set_name('小明') #通过setter方法间接访问name属性
men.set_age(16) #通过setter方法间接访问age属性
men.name='小陈' # 通过外部方法修改属性 无法修改封装的属性
men.age=17 #通过外部方法修改属性 无法修改封装的属性
print('姓名:%s\n年龄:%d' %(men.get_name(),men.get_age())) #getter直接访问封装属性
if __name__ == '__main__':
main()
>>>
姓名:小明
年龄:16
'''
关于封装属性内部操作的问题
'''
class Member:
def set_name(self, name): # 设置name属性方法
self.__name = name # 为name属性赋值
def set_age(self, age): # 设置age属性方法
self.__age = age # 为age属性赋值
def get_name(self): # 获取name属性的方法
return self.__name # 返回封装属性内容
def get_age(self): # 获取age属性的方法
return self.__age # 返回封装属性内容
def change_info(self, temp):
temp.__name = '小华'
def __del__(self): # 析构方法 ,用于释放内存资源
print('资源已释放')
class Member_1:
def change_info(self):
pass
def main(): # 主函数
men = Member() # 实例化Member对象
men.set_name('小明') # 通过setter方法间接访问name属性
men.set_age(16) # 通过setter方法间接访问age属性
men.name = '小陈' # 通过外部方法修改属性
men.age = 17 # 通过外部方法修改属性
print('姓名:%s\n年龄:%d' % (men.get_name(), men.get_age())) # getter直接访问封装属性
men_1 = Member_1()
men.change_info(men_1) # 其他实例化对象无法修改Member对象的属性
men.change_info(men) # 对象直接访问私有属性
print('姓名:%s\n年龄:%d' % (men.get_name(), men.get_age()))
if __name__ == '__main__':
main()
>继承性
'''
类继承定义
'''
class Person:
def __init__(self):
self.__name = None
self.__age = 0
def set_name(self, name):
self.__name = name
def set_age(self, age):
self.__age = age
def get_name(self):
return self.__name
def get_age(self):
return self.__age
class Student(Person): # 继承Person类
pass
def main():
stu = Student()
stu.set_name('v_xianqchen')
stu.set_age(18)
print("姓名:%s 年龄:%d " % (stu.get_name(), stu.get_age()))
if __name__ == '__main__':
main()
'''
子类扩充功能
'''
class Person:
def __init__(self):
self.__name = None
self.__age = 0
def set_name(self, name):
self.__name = name
def set_age(self, age):
self.__age = age
def get_name(self):
return self.__name
def get_age(self):
return self.__age
class Student(Person):
def __init__(self):
self.__school = None
def set_school(self, school):
self.__school = school
def get_school(self):
return self.__school
def main():
stu = Student()
stu.set_name('v_xianqchen')
stu.set_age(18)
stu.set_school('电子科技大学')
print("姓名:%s 年龄:%d 学校:%s" % (stu.get_name(), stu.get_age(), stu.get_school()))
if __name__ == '__main__':
main()
>多态性
'''
多态
'''
'''方法覆写'''
class Channel:
def build(self):
print('【channel】通道连接...')
class Databased(Channel):
def build(self):
print('新的通道开始建立连接')
def main():
cha=Databased()
cha.build()
if __name__ == '__main__':
main()
#在子类中可以定义与父类中方法名称,返回值类型,参数类型及个数相同的新方法,这种方法称为方法覆写,在调用的过程中会调用子类重写的方法
'''
调用父类覆写过的方法
'''
class Channel:
def build(self):
print('【channel】通道连接...')
class Databased(Channel):
def build(self):
super().build()
print('新的通道开始建立连接')
def main():
cha=Databased()
cha.build()
if __name__ == '__main__':
main()
class Message:
def get_info(self):
return 'www.baidu.com'
class DatabaseMessage(Message):
def get_info(self):
return 'www.tencent.com'
class Channel:
def send(self,msg):
if isinstance(msg,Message) or isinstance(msg,DatabaseMessage):
print(msg.get_info())
def main():
channel = Channel()
channel.send(Message())
channel.send(DatabaseMessage())
if __name__ == '__main__':
main()