• 类与对象


    类与对象

    '''
    类与对象的定义
        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()
    
  • 相关阅读:
    【python】绘图,颜色,线型
    【python】绘图,画虚线
    【python】绘图坐标轴标题中包含上标或下标
    【python】python3.7与3.9共存,两个3版本同时存在(平时用vscode敲代码)pip复制
    【python】 matplotlib 画图刻度、图例等字体、字体大小、刻度密度、线条样式设置
    Charles乱码问题
    charles的设置断点
    Charles的设置手机抓包
    ajax
    java jdbc连接mysql数据库实现增删改查操作
  • 原文地址:https://www.cnblogs.com/chendakeng/p/16133136.html
Copyright © 2020-2023  润新知