Python -- 面向对象:初识

面向对象:初识

回顾: 面向过程式编程 vs 函数式编程

通过对比可知:函数式编程较面向过程式编程最明显的两个特点:

  1. 减少代码的重复性
  2. 增强代码的可读性
# 面向过程式编程,测量对象元素个数
s = 'aasdasdaskfl'
count = 0
for i in s:
    count += 1

l1 = [1,2,3,4]
count = 0
for i in l1:
    count += 1

# 函数式编程
def func(s):
    count = 0
    for i in s:
        count += 1
    return count
print(func('aasdasdaskfl'))
func([1,2,3,4])

函数式编程 vs 面向对象编程

# 函数式编程

# auth 认证相关
def login():
    pass
def regisgter():
    pass

# account 账户相关
def func1():
    pass
def func2():
    pass
# 面向对象编程
class LoginHandler:
    def login(self):
        pass
    def regisgter(self):
        pass

class Account:
    def func1(self):
        pass
    def func2(self):
        pass

面向对象的优点:

  1. 是一类相似功能函数的集合,使代码更清晰化,更合理化
  2. 站在上帝的角度去考虑问题,类是一个公共模板,对象是从这个公共模板产出的
    • 类是具有相似功能和特性的事物
    • 对象是类的具体表现

7.1.1 类的结构

class Student:
    '''
    此处是构建学生
    '''
    diary = '日常'
    exam = '考试'
    def work(self):
        print('学习')
    def task(self):
        print('任务')
# class 是关键字与def用法相同,定义一个类
# Student 是类的类名,类名要具有描述性,首字母要大写,类名尽量不要用下划线
# 类的结构分为两部分
静态变量  --  动态方法

7.1.2 从类名的角度研究类

  • 类名操作静态属性
  1. 查看类中的偶有内容: 类名.__dict__

    class Student:
        '构建学生'
        diary = '学习'
        exam = '考试'
        def work(self):
            print('学习')
        def task(self):
            print('任务')
    print(Student.__dict__)
    print(Student.__dict__['diary'])
    Student.__dict__['task'] = '0'  # 会报错
    print(Student.__dict__)
    
    # 通过这样的方法只能查询,不能增删改
    # 类名.__dict__ 只用于查询全部内容,一般不用于单独属性查询
  2. 万能的 .
    class Student:
        '构建学生'
        diary = '学习'
        exam = '考试'
        def work(self):
            print('学习')
        def task(self):
            print('任务')
    print(Student.diary)    # 查
    Student.exam = '不考试'  # 改
    del Student.diary        # 删
    Student.cloth = '校服'    # 增
    
    # 通过万能的 . 可以增删改查类中的单个属性
  • 类名操作动态方法

    前提: 除了两个特殊方法:静态方法,类方法之外,一般不会通过类名操作一个类中的方法

    class Student:
        '构建学生'
        diary = '学习'
        exam = '考试'
        def work(self):
            print('学习')
        def task(self):
            print('任务')
    
    Student.work(111)
    Student.task(222)
    # 这里通过类名操作动态方法必须传 一个实参给self

7.1.3 从对象的角度研究类

? 什么是对象 ? 对象是从类中出来的,只要是类名加上() ,这就是一个实例化过程,会实例化一个对象.

实例化对象会发生三件事:

  1. 在内存中创建一个对象空间
  2. 自动执行__init__方法,并将对象空间传给self参数
  3. 执行__init__方法里面的代码,给对象空间封装其属性

  • 对象查询对象中所有的属性. 对象.__dict__
  • 对象操作对象中的单个属性. 万能的 .
class Student:
    diary = '学习'
    exam = '考试'

    def __init__(self,n,s):
        print('小学生')
        self.name = n
        self.sex = s

obj = Student('Agoni','男') # 只要实例化对象,就会自动执行__init__方法
print(obj)   <__main__.Student object at 0x0000015655819668>  obj和self 的地址相同
print(obj.__dict__) # 对象查看全部属性

# 对象可以操作对象空间的属性  万能的点
print(obj.name)    # 查 Agion
obj.sex = '女'     # 改
print(obj.__dict__) {'name': 'Agion', 'sex': '女'}
obj.age = '18'     # 增
print(obj.__dict__) {'name': 'Agion', 'sex': '女', 'age': '18'}
del obj.sex        # 删
print(obj.__dict__) {'name': 'Agion', 'age': '18'}
  • 对象查看类中的属性
  • 对象操作类中的方法
class Student:
    diary = '学习'
    exam = '考试'

    def __init__(self):
        print('小学生')
        self.name = 'Agion'
        self.sex = '男'

    def work(self):
        print('工作')
    def task(self):
        print('任务')

# 对象查看类中的属性
print(obj.diary)
print(obj.exam)

# 对象操作类中的方法
obj.work()
obj.tools()

类中的方法一般都是通过对象执行的(除去类方法,静态方法外),并且对象执行这些方法都会自动将对象空间传给方法中的第一个参数self .

self 其实就是类方法(函数)的第一个位置参数,只不过解释器会自动将调用这个函数的对象传给self.所以把类方法的第一个参数约定成俗设置成self,代表这个即使对象.

一个类可以实例化多个对象

obj1 = Student('梅西','男')
obj2 = Student('C罗','男')
print(obj1,obj2)
print(obj1.__dict__)
print(obj2.__dict__)

原文地址:https://www.cnblogs.com/Agoni-7/p/11143388.html

时间: 2024-10-13 13:29:42

Python -- 面向对象:初识的相关文章

python基础之面向对象初识

一 面向对象初识 Python要么是面向过程要么是面向对象. 概念及优缺点: 面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了程序的复杂度 缺点是:一套流水线或者流程就是用来解决一个问题,生产汽水的流水线无法生产汽车,即便是能,也得是大改,改一个组件,牵一发而动全身. 应用场景:一旦完成基本很少改变的场景,著名的例子有Linux內核,git,以及Apache HTTP Server等. 面向对象的

初识python面向对象

一.初识python面向对象: class Person: #使用class关键字定义一个类 age=0 #类变量(静态变量) def eat(self,food): #定义一个方法 self.age=5 #self是实例本身,self.age是实例变量 print("I will eat %s" %food) xiaofan=Person() #实例化,生成对象xiaofanprint(xiaofan.age) #调用对象方法,因为还没有调用eat方法,则使用类方法的值xiaofan

Python中面向对象初识到进阶

面向对象初识到进阶 # 面向对象结构: # class 类名: # def __init__(self,参数1,参数2): # self.对象的属性1 = 参数1 # self.对象的属性2 = 参数2 # # def 方法名(self):pass # # def 方法名2(self):pass # # 对象名 = 类名(1,2) #对象就是实例,代表一个具体的东西 # #类名() : 类名+括号就是实例化一个类,相当于调用了__init__方法 # #括号里传参数,参数不需要传self,其他与

python之面向对象初识

一.面向对象初识1.结构上 面向对象分成两部分:属性.方法 class A: name = 'xiaoming' # 静态属性.静态变量.静态字段. def func1(self): # 函数.动态属性.方法. pass 2.函数与面向对象: 1,函数封装一个功能,而面向对象封装多个相关的功能. 2,面向对象比较抽象,它是一种思想,站在上帝的角度去理解它. 3,面向对象程序可扩展,对象都是一个个独立的.耦合性,差异性. 函数: def register(argv): pass def login

Python之面向对象(一)面向对象初识

6.2 面向对象初识 面向对象初识 回顾面向过程编程VS函数式编程 面向过程编程 # 面向过程编程 测量对象的元素个个数. s1 = 'fjdsklafsjda' count = 0 for i in s1: count += 1 l1 = [1,2,3,4] count = 0 for i in l1: count += 1 #面向过程编程 函数式编程 def func(s): count = 0 for i in s: count += 1 return count func('fdsafd

day06_雷神_面向对象初识

day_06 递归函数 自己用自己.一般递归100多次,都没有解决的问题,放弃递归. count = 0 def func1(): global count count += 1 print(count) func1() func1() 默认递归深度:998 设置递归深度 import sys sys.setrecursionlimit(20000) count = 0 def func1(): global count count += 1 print(count) func1() func1

Python 面向对象class(2)

Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们先来简单的了解下面向对象的一些基本特征. 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定

python面向对象进阶

isinstance(obj,cls)检查是否obj是否是类 cls 的对象. isinstance(obj,cls)检查是否obj是否是类 cls 的对象. 反射 python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数(参数是对象,字符串格式的属性名) hasattr getattr setattr delattr __del__,就是析构方法,当对象在内存中被释放时,自动触发执行. 注:此方法一般无须定义,

Python面向对象(2)

1.除了封装,Python面向对象还有继承这一功能,如下代码,这是简单的继承功能. class Animal: def chi(self): print(self.name+' 吃') def he(self): print(self.name + ' 喝') class Cat: def __init__(self, name): self.name = name def jiao(self): print('瞄') class Dog(Animal):#继承Animal这个父类,拥有父类的方