python进阶之面向对象初识

Posted 蔠缬草

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于python进阶之面向对象初识的主要内容,如果未能解决你的问题,请参考以下文章

python基础详解

Python中面向对象初识到进阶

Python 入门 之 初识面向对象

Python基础之(面向对象初识)

python-面向对象进阶

Python之面向对象面向对象初识