zoukankan      html  css  js  c++  java
  • python进阶之面向对象初识

    面向对象 

      不同于面向过程的编程思想,面向对象是一种将程序抽象为一个个对象的编程思想,能更好的处理现实世界到的一些复杂问题。

      通过下面的例子来初步了解面向对象的编程方式。

    class Person:  # class + 类名 :定义一个类
        place = 'earth'  # 类属性 (静态属性)
    
        # __init__初始化方法,默认创建一个self对象,用来接收对象的属性。可以没有初始化方法
        def __init__(self, name, sex, age, nationality):  # self必须有,其他的参数以对象具有的属性来定义
            self.name = name   # 实例化属性
            self.sex = sex
            self.age = age
            self.nationality = nationality
    
        def walk(self):  # 方法即函数 (动态属性),定义这一类对象所能做的事情。self必须有
            print('%s行走' % self.name)
    
    
    zxc = Person('张三', '', 24, '中国')  # 对象 = 类名(实例化属性) -- 实例化:创建了一个具体的对象
    print(zxc.name)  # 张三        查看对象的属性
    print(Person.place)  # earth   查看类的属性
    print(zxc.__dict__)      # 查看对象的全部属性  是个字典
    print(Person.__dict__)   # 查看类的全部属性    是个字典
    zxc.name = '李四'        # 修改属性
    zxc.walk()  # 李四行走         使用方法 相当于Person.walk(zxc)

      通过上面的例子简单总结一下

    """
        类:用来描述一类具有相同属性和方法的对象的集合
        实例化:对象 = 类名()
        对象:1,可以查看属性 2,修改属性 3,调用方法 
        类:1,实例化 2,调用方法,但是要自己传self参数 3,查看和修改类属性
    """

      下面了解一下类和对象的命名空间,先定义一个类,在实例化两个对象做对比。

    class Demo:
        class_nature = '静态属性'
        class_nature1 = ['静态属性']
    
        def __init__(self, object_nature):
            self.nature = object_nature
    
        def dynamic_nature(self):
            print('动态属性')
    
    
    d = Demo('实例化属性')
    d1 = Demo('实例化属性1')

      先研究下类

    # 类只能调用类属性和动态属性即在类的命名空间中的名字
    print(Demo.class_nature)
    # print(Demo.nature)  # 报错   类不能访问对象命名空间中的名字

       在看下对象

    # 对象可以访问类命名空间中的名字
    print(d.class_nature)  # 静态属性
    d.dynamic_nature()  # 动态属性

       可以看到对象可以访问类的命名空间中的名字,进而看看是否可以通过对象对类属性进行修改。

    # 当属性是不可变数据类型,对象不能修改类命名空间中的名字,所有的修改相当于在对象自己内部创建了一个新的属性
    Demo.class_nature = '类属性修改'
    d.class_nature = 'd类属性修改'
    d1.class_nature = 'd1类属性修改'
    print(Demo.class_nature)  # 类属性修改
    print(d.class_nature)     # d类属性修改
    print(d1.class_nature)    # d1类属性修改

       在看可变数据类型

    # 当属性是可变数据类型,对象可以修改类属性里面的元素,且修改会作用于全部的对象。但是类属性本身还是不能修改
    print(Demo.class_nature1)   # ['静态属性']
    d.class_nature1[0] = 'd修改'
    d.class_nature1 = ['修改']
    print(d.class_nature1)    # ['修改']
    print(Demo.class_nature1)   # ['d修改']
    print(d.class_nature1)      # ['修改']
    print(d1.class_nature1)     # ['d修改']

      类的组合使用:一个对象的属性值是另外一个类的对象

      下面来个例子感受一下

    class Teacher:
        def __init__(self,name, age, birthday):
            self.name = name
            self.age = age
            self.birthday = birthday   # 接收Birthday类的对象,从而通过Teacher类的对象就可以操作Birthday类
    
    
    class Birthday:
        def __init__(self, year, month, day):
            self.year = year
            self.month = month
            self.day = day
    
    
    birth = Birthday(1992, 12, 23)
    teacher = Teacher('张老师', 26, birth)
    print(teacher.birthday.year)  # 1992
    print(teacher.birthday.month)  # 12
    print(teacher.birthday.day)  # 23
  • 相关阅读:
    OLTP与OLAP
    Entity Framework(07):TPH、TPT、TPC与继承类
    Entity Framework(05):主从表的增删改
    Entity Framework(06):配置关系
    Entity Framework(04):主从表数据加载方式
    Entity Framework(03):Code First基础
    Entity Framework(02):模型优先 ,ObjectContext类
    Entity Framework(01):模型优先,Linq to Entities
    简介LINUX远程联机软件:PUTTY、SecureCRT、X-Manager
    php函数分割
  • 原文地址:https://www.cnblogs.com/zxc-Weblog/p/8298628.html
Copyright © 2011-2022 走看看