• python学习笔记(7): 面向对象


    class Foo:
        #类中的函数
        def bar(self):
            #功能阐述
            print('Bar')
            pass
        def hello(self,name):
            print('i am  %s' %name)
    #根据Foo创建对象obj
    obj=Foo()
    #在创建对象的时候,记得后面加个括号
    #注意,按照python的通用规则,Class用驼峰表示(HelloWorld)
    #而其他的obj等,都用'_'隔开(this_is_obj)
    #类中函数第一个方法必须是self,指代本类的一个东西,类中定义的函数叫做'方法'
    obj.bar()
    obj.hello('july')
    #创建类
    class Foo:
        #这里我们可以创建一个类级别的变量
        #他不会随着由此类创建的变量而变化
        name='Jan'
    
        def bar(self):
            print('Bar')
        def hello(self,name):
            print('you are %s' %self.name)
            print('I am %s' %name)
            print('
    ')
    #根据Foo创建对象
    obj1= Foo()
    obj2=Foo()
    obj1.hello('August')
    obj2.hello('July')
    
    #这个self就是一个代指,代指了自己所在的class
    #也可以使用self点代自己所指的class函数本身
    #self本身就是一个代词,并不一定要交self,也可以用其他的词来代替,只不过
    #必须是这个类的所有字方法的第一个参数
    #创建类
    class Foo:
        #这里可以创建一个类级别的变量
        #他不会随着由此类创建的变量而变化
        name='Jan'
    
        def bar(july):
            print('Bar')
    
        def hello(july,name):
            #但是只要其作为第一参数的位置没有变,依旧是Foo
            #Foo Class的自我指代
            print('you are %s'%july.name)
            print('I am %s'%name)
            print('
    ')
    #根据Foo创建对象
    obj1 = Foo()
    obj2 = Foo()
    obj1.hello('August')
    obj2.hello('July')

    一、类和实例

      1.类(Class):用来具有相同属性和方法的对象的集合。它定义了该集合汇总的每个对象共有的属性和方法,对象是类的实例。

      2.类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中,且定义在函数体外。类变量通常不作为实例变量使用。

      3.实例变量:定义在方法中的变量,只作用于当前实例的类

      4.类和对象的使用:

        类就是一个模板,模板里可以包含多个函数,在函数里实现一些功能

        对象则是根据模板创建的实例,通过实例对象可以创建类中的函数

      5.构造函数:构造函数式一种特殊的方法,主要用来在创建对象初始的时候,就完成一些动作

            跟所有的面向对象的语言一样,python也是有构造函数的

      

    #创建类
    class Foo:
        def __init__(self):#这就是构造函数,它的职责就是在模型创建的初期,就完成一些动作
            #简单的说,就是自定义一些初始化的步骤
            #同样,它也需要self来指代这个class
            self.name='Jane'
        def hello(self,name):
            print('you are %s'%self.name)
            print('I am %s'%name)
            print('
    ')
    #当你创建一个Foo类的时候,init会自动跑一圈
    obj=Foo()
    #在我们的例子中,我们会默认给self自己的name变量,赋值为'JAN'
    #此刻,当我们调用Foo的hello()方法的时候,hello自己的name变量,被赋值为'July'
    obj.hello('July')
    #创建类
    class Foo:
        def __init__(self,name):#可以在这里附加上一些参数
            #这些参数将是你创建一个Foo类的时候的必要条件
            self.name=name
        def hello(self,name):
            print('you are %s'%self.name)
            print('I am %s'%name)
            print('
    ')
    #完毕
    #当你还在创建一个Foo类的时候,init()就会自动跑一遍
    #此刻,你可以直接跑Foo(),需要填入一个参数:name2
    obj=Foo('Feb')
    #然后再调用hello,并复制July
    obj.hello('July')#这个地方首先打印出:you are Feb;后面打印出'I am july'
    #为了防止这种篡改年龄的事情的发生,为了维护世界的和平,需要把关键信息做好隐藏
    class Student:
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def detail(self):
            print(self.name)
            print(self.age)
    Lilei=Student('LiLei',12)
    Lilei.age=20
    Lilei.detail()  #LiLei          #20

    以下这种方式实现了信息隐藏

    二、访问限制

    三、继承和多态以及多重继承

      1.在python中展现面向对象的3大特性:

        面向对象的3大特性是:封装、继承和多态

      2.封装是指将内容封装到某个地方,用于日后的调用

        他需要:

          把内容封装在某处

          从移除调用被封装的内容

    class Student:
        #假定我们初始化一个Student类的时候做的就是,记录下每个学生的名字和年龄
        def __init__(self,name,age):
            self.name=name
            self.age=age
            #至此,我们用self指代student本身,并用name和age存下了他们的年龄和名字
    
    #此时,我们创建一个学生
    obj1=Student('July',18)
    print(obj1.name)#直接调用obj1对象的name属性
    print(obj1.age)#直接调用obj1对象的age属性
    
    obj2= Student('Aug',73)
    print(obj2.name)
    print(obj2.age)
    class D:
        def bar(self):
            print('D.bar')
    class C(D):
        def bar(self):
            print('C.bar')
    class B(D):
        pass
    
    class A(B,C):
        pass
    a=A()
    #在执行bar方法的时候,首先在A类中进行查找,如果A类中没有,则继续去B类中寻找
    #如果B中没有,则继续去D中去寻找,如果D类中没有,则继续去C类中进行寻找,如果还是没有找到就会报错
    #所以查找顺序为:A-->B--->D-->C
    #在上述的查找过程中,一旦找到,寻找过程就会立即中断,不会再继续查找了
    #python是一种弱类型的语言,只要不报错,什么东西都可以放进来
    a.bar()

    四、获取对象信息

    1.当我们拿到一个对象的引用时候,如何知道这个对象是什么;类型,有哪些方法的呢?

    type(123)
    int 类型

    type('str')
    str类型

    type(abs)#abs是取绝对值的一个方法
    #builtin function or method#内置的方法或者函数

    class a:
      def __init__(self):
        pass
    type(a)


    如何用语句判断是不是一种type呢?
    type(123)=type(456)
    #True

    type('abc')==type('123')
    #True

    type('abc')==type(123)
    False

    用instance()
    instance()告诉我们一种对象是不是某一种类型(包括继承关系)
    class A:
      pass
    class B(A):
      pass
    class C(B)
      pass
    K=A()
    g=B()
    y=C()

    isinstance(y,C)
    class A:
        pass
    class B(A):
        pass
    class C(B):
        pass
    k=A()
    g=B()
    y=C()
    
    print(isinstance(y,C))#True
    print(isinstance(y,B))#True
    print(isinstance(y,A))#True

      2.使用dir()

      如果要获得一个对象的属性和方法,那就使用dir()函数,返回一个包含字符串的list

      比如,获得一个str对象的所有的属性和方法

    print(dir('ABC'))
    
    #['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

    五、实例属性和类属性

      由于python是动态语言,根据创建的实例可以任意绑定属性

      给实例绑定属性的方法是通过实例变量,或者通过self变量

    六、模块和包

      python的程序由包(package)、模块(module)和函数组成。包是由一系列模块组成的集合。模块是处理某一类问题的函数和类的集合

      包就是一个完成特定任务的工具箱,python提供了很多有用的工具包。如字符串处理,图形用户接口、web应用、图形图像处理等。这些自带的工具包和模块安装在Python的安装目录下的lib子目录中。

      注意:至少包含一个__init__.py文件,该文件的内容可以为空。__int__.py用于表示当前文件夹是空的。

      模块

      在Python中一个文件可以被看成一个独立的模块,而包对应着文件夹,模块把python代码分成一些有组织的代码段,通过导入的方式实现代码的重用。

      导入模块的时候,是按照sys.path变量的搜索模块,sys.path的值是包含每一个独立路径的列表,包含当前目录、python目录、python环境变量、搜索顺序按照路径在列表中的顺序

      想想看自己的python路径,可以

      import sys

      print(sys.path)

    如果你发现你在某个地方写的文件(包)import错误,你就可以看看这个sys.path是否囊括了你那批文件的根目录

      导入模块

      使用import语句(不管是别人写的,还是你下载别人的)

      import module1

      import module2

      impotr module3

      import module1,module2,module3

    一般在文件首部导入所有的模块

      python标准库

      第三方库

      应用程序自定义模块

    使用from-import语句导入模块

    单行导入

      from module import name1,name2,name3

    多行导入

      from module import name1,name2,name3

    导入全部属性

      包

      包将所哟联系的模块组织在一起,有效避免模块名的冲突问题,让应用组织结构更加的清晰。

  • 相关阅读:
    Orleans 2 实例
    Linux基础1 目录和文件系统
    C#中的异步多线程补充1
    委托的小例子(基本委托,匿名方法,lambda)
    Orleans 1 基本概念
    WPF10 Binding-2
    WPF9 Binding-1
    WPF8 UI布局
    WPF7 布局控件
    软工总结
  • 原文地址:https://www.cnblogs.com/bigdata-stone/p/9806320.html
Copyright © 2020-2023  润新知