类与对象

类与对象

'''
类与对象的定义
    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()
posted @ 2022-04-11 23:45  饭兜  阅读(24)  评论(0编辑  收藏  举报