zoukankan      html  css  js  c++  java
  • Python_基础_(面向对象)

    ## 三大编程范式

    1:面向过程编程

    2:函数式编程

    3:面向对象编程

    ## 类与对象的相关知识

     :将一类事物的相同特征或动作整合到一起就是类,类就是一个抽象的概念

    对象:就是基于类而创建的一个具体的事物

    类和对象的关系:对象是由类来产生的,上帝造人,上帝首先有一个造人的模板,这个模板既是人的类,然后上帝根据类的定义来产生一个个的人

     实例化:什么叫实例化,由类生产对象的过程叫实例化,实例化的结果就是一个对象,或者叫一个实例

    ## 声明一个函数基本结构

    def functionName(args):
        "函数声明文档字符串"
        函数体

    ## 声明一个类基本结构

    ckass 类名:
        "类声明文档字符串"
        类体

    ## 创建一个类

    class Data:     # 规范,类名的首字母大写
        pass
    
    d1 = Data()
    # 用类Data实例化出一个对象d1
    # 实例化Data(),产生一个返回的结果

    ## 类的类型划分

    ## 经典类
    class 类名:
        pass
    
    # 新式类
    class 类名(父类):
        pass
    
    # 注:只有在python2中采区分新式类和经典类
    # Python3中的都为新式类

    ## 属性

    用来描述一类事物,类的对象就是一个具体的事物,是事物就具有属性

    1:数据属性:就是指变量

    2:函数属性:指的是函数,在面向对象中通常称为方法

    # 注:类和对象均通过"."来访问自己的属性

    ## 类中的内置函数

    class Java:
        "注释文档:该类实现的功能为"
        ide = "MyEclipse"   # 数据属性
        def Bug(self):      # 函数属性
            print("你的程序出现了Bug")
    
    print(Java.ide)     # 输出为 MyEclipse
    j = Java.Bug
    print(j)            # 得到函数Bug的内存地址  <function Java.Bug at 0x000001773135BC80>
    j(j)                # 相当于执行函数Bug得到  你的程序出现了Bug
    
    print(Java.__dict__)    # 查看属性字典,存放类的数据属性,类的函数属性
    # {'__module__': '__main__', 'ide': 'MyEclipse', 'Bug': <function Java.Bug at 0x000002BD3B5ABC80>, '__dict__': <attribute '__dict__' of 'Java' objects>, '__weakref__': <attribute '__weakref__' of 'Java' objects>, '__doc__': None}
    
    print(Java.__dict__["ide"])    # 输出为MyEclipse,上方的Java.ide实质上是到属性字典中查找
    
    Java.__dict__["Bug"]("Bug")    # 输出 你的程序出现了Bu
    
    Java.__name__    # 显示类名
    Java.__doc__    # 注释文档
    Java.__base__    # 显示Object,所有的类都有一个共同的祖先Object <class 'object'>
    Java.__bases__    # 将object以元组的形式显示出来,(<class 'object'>,)
    Java.__dict__    # 属性字典
    Java.__module__    # 显示该类所在的模块,类在本文件中,执行本文件,指输出__main__,类在其它文件中,显示文件的路径
    Java.__class__    # <class 'type'>

    ## 对象相关知识

    class Program:
        ide = "MyEclipse"
        def __init__(self,author,development_time,size):
            self.author = author
            self.development_time = development_time
            self.size = size
            print("程序的作者是:%s,程序的创作时间为:%s,程序的大小为%s" %(self.author,self.development_time,self.size))
    
        def Bug(self):
            print("你的程序没有Bug哈哈哈")
    
    P = Program("Henry","2018.1.1",1024)
    # 实例化出一个对象
    # 输出   程序的作者是:Henry,程序的创作时间为:2018.1.1,程序的大小为1024

    ## __init__

    class Program:
        ide = "MyEclipse"
        def __init__(self,author,development_time,size):
            # 内置的初始化函数,当实例化时就自动调用
            # 不用像函数中的那样return init(author,development_time,size),自动返回
            # self代表的是自己本身,将所有东西都封装到self中,自动返回,返回的是self
    
            self.author = author
            self.development_time = development_time
            self.size = size
            print("程序的作者是:%s,程序的创作时间为:%s,程序的大小为%s" %(self.author,self.development_time,self.size))
    
        def Bug(self):
            print("你的程序没有Bug哈哈哈")
    
    P = Program("Henry","2018.1.1",1024)
    # 函数的实例化过程,调用初始化函数__init__,得到的是一个对象形式
    # 实际上将实例化得到的对象 j 传递给self
    
    # 输出   程序的作者是:Henry,程序的创作时间为:2018.1.1,程序的大小为1024
    
    print(P.ide)
    # 调用数据属性(init中找不到则到外层找该属性,找到类这层没有,则会报错,而函数可以到全局变量中查找)
    
    Program.Bug(P)  # 类Bug中有self时,就传入一个实例化出的对象(后面还会解决)
    P.Bug()

    # self:代表的是创建类的实例化本身,谁来实例化就代表谁,在__init__内部可以将各种属性绑定到self,因为self就指向了创建实例本身;当有了__init__方法,在创建实例时就不能传入空参数,必须传入与__init__中匹配的参数,但self不需要传入,Python解释器会自己将实例变量传入

    # 实例只有数据属性,实例的函数属性是在类中找的

    # 两字典:初始化字典,类字典;当初始化字典中找不到属性则到类字典中找

    ## 初始化字典和类字典的区别

    print(Program.__dict__)
    # {'__module__': '__main__', 
    # 'ide': 'MyEclipse', 
    # '__init__': <function Program.__init__ at 0x00000246A85DBD08>, 
    # 'Bug': <function Program.Bug at 0x00000246A85DBD90>, 
    # '__dict__': <attribute '__dict__' of 'Program' objects>, 
    # '__weakref__': <attribute '__weakref__' of 'Program' objects>, 
    # '__doc__': None}
    
    print(P.__dict__)
    #{'author': 'Henry', 
    # 'development_time': '2018.1.1',
    # 'size': 1024}

    ## 类属性的增删改查

    class Program:
        ide = "MyEclipse"
        def __init__(self,author,development_time,size):
            self.author = author
            self.development_time = development_time
            self.size = size
            print("程序的作者是:%s,程序的创作时间为:%s,程序的大小为%s" %(self.author,self.development_time,self.size))
    
        def Bug(self):
            print("你的程序没有Bug哈哈哈")
    
    #
    print(Program.ide)  # MyEclipse
    
    #
    Program.ide = "Eclipse"
    print(Program.ide)  # Eclipse
    
    #
    del Program.ide
    print(Program.__dict__)     # 打印出的中无ide
    
    #
    Program.ide2 = "PyCharm"
    print(Program.__dict__)     # 打印中多了ide2字典
    
    # 增加函数属性
    def equipment(self,mouse):
        print("鼠标为:%s" %mouse)
    
    Program.Equ = equipment
    print(Program.__dict__)     # 打印中加入方法 Equ
    P = Program("Henry","2018.1.1",1024)
    P.Equ("联想")

    ## 实例属性的增删改查

    class Program:
        ide = "MyEclipse"
        def __init__(self,author,development_time,size):
            self.author = author
            self.development_time = development_time
            self.size = size
            print("程序的作者是:%s,程序的创作时间为:%s,程序的大小为%s" %(self.author,self.development_time,self.size))
    
        def Bug(self):
            print("你的程序没有Bug哈哈哈")
    
    
    P = Program("Henry","2018.1.1",1024)
    print(P.__dict__)       # {'author': 'Henry', 'development_time': '2018.1.1', 'size': 1024}
    
    #
    print(P.author)             # Henry
    print(P.development_time)   # 2018.1.1
    print(P.size)               # 1024
    
    #
    P.author_age = 18
    print(P.__dict__)           # {'author': 'Henry', 'development_time': '2018.1.1', 'size': 1024, 'author_age': 18}
    print(P.author_age)         # 18
    
    def test(self):
        print("这是新增函数")
    
    P.test = test
    print(P.__dict__)           # {'author': 'Henry', 'development_time': '2018.1.1', 'size': 1024, 'author_age': 18, 'test': <function test at 0x00000157C604BC80>}
    print(Program.__dict__)     # 没有上方新增的方法
    
    #
    P.author_age = 19
    print(P.author_age)         # 19
    
    #
    del P.author_age
    print(P.__dict__)           # {'author': 'Henry', 'development_time': '2018.1.1', 'size': 1024, 'test': <function test at 0x000001BE7FF9B7B8>}
    
    # 注:不要修改底层的字典属性
    P.__dict__["author"] = "YuHong"
    print(P.author)             # YuHong
    print(P.__dict__)           # {'author': 'YuHong', 'development_time': '2018.1.1', 'size': 1024, 'test': <function test at 0x00000174DF4DB7B8>}

    ## 将一个类当成一个作用域

    class MyClass:
        pass
    
    x = 1
    y = 2
    
    MyClass.x = 3
    MyClass.y = 4
    
    print(x,y)                  # 1  2
    print(MyClass.x,MyClass.y)  # 3  4

    ## 其它注意点

    ide = "MyEclipse"
    class Program:
    
        def __init__(self,author,development_time,size):
            self.author = author
            self.development_time = development_time
            self.size = size
            print(ide)      # 调用全局变量中的coountry
    
        def Bug(self):
            print("你的程序没有Bug哈哈哈")
            
    P = Program("Henry","2018.1.1",1024)    # MyEclipse

    
    
    ide = "MyEclipse"
    class Program:
        ide = "Eclipse"     # 当有一个局部变量时
        def __init__(self,author,development_time,size):
            self.author = author
            self.development_time = development_time
            self.size = size
            print(ide)      # 调用全局变量中的coountry
    
        def Bug(self):
            print("你的程序没有Bug哈哈哈")
    
    P = Program("Henry","2018.1.1",1024)    # MyEclipse

    class Program:
        ide = "Eclipse"
        list_num = ["a","b"]
        def __init__(self,author,development_time,size):
            self.author = author
            self.development_time = development_time
            self.size = size
    
        def Bug(self):
            print("你的程序没有Bug哈哈哈")
    
    P = Program("Henry","2018.1.1",1024)
    print(P.list_num)           # ['a', 'b']
    P.list_num = [1,2,3,4,5]    # 相当于新建一个list_num列表
    print(Program.list_num)     # ['a', 'b']
    print(P.__dict__)           # {'author': 'Henry', 'development_time': '2018.1.1', 'size': 1024, 'list_num': [1, 2, 3, 4, 5]}
    print(Program.__dict__)     # 中没有  'list_num': [1, 2, 3, 4, 5]
    
    P.list_num.append("c")      # 该添加是在初始化函数 __init__中添加的
    print(P.list_num)           # [1, 2, 3, 4, 5, 'c']
    print(Program.list_num)     # ['a', 'b']
  • 相关阅读:
    [php]php时间戳当中关于时区的问题
    [jQuery] jQuery如何获取同一个类标签的所有的值
    sed 命令基础
    Docker 学习第6课
    Docker 学习第五课
    Docker 学习第四课
    Docker 学习第三课
    Docker 学习第二课
    Docker学习第一课
    XdeBug的使用
  • 原文地址:https://www.cnblogs.com/Doaoao/p/10146600.html
Copyright © 2011-2022 走看看