面向对象初识一

发布于:2023-01-12 ⋅ 阅读:(508) ⋅ 点赞:(0)

1. 面向对象编程:

  • 是一类相似功能函数的集合,使你的代码更清晰化,更合理化。
  • 面向对象的程序设计的核心是对象

2. 那什么是类? 什么又是对象?

  • 类:就是具有相同属性和功能的一类事物
  • 对象:就是类的具体表现形式,是一个容器

3. 类的结构及术语

3.1 总结

class A(object):
    # 类属性/类变量/静态字段 都是他
    price = 698

    # 对象的初始化方法/双下滑线下划线方法
    def __init__(self):
        # 实例属性/实例变量/字段 都是他
        self.name = "dbj"

    # 类方法,类调用的时候,会自动把当前类传当作第一个参传入
    @classmethod
    def test1(cls):
        pass

    # 对象的绑定方法,又叫实例方法,对象调用的时候,会自动把当前对象传当作第一个参传入
    def test2(self):
        pass

    # 普通函数,调用手动传参
    @staticmethod
    def test3():
        pass

3.1 案例一

class People:
    country = '中国'  # 类变量/静态字段
    # 实例化对象时,自动执行,里面的参数,是实例方法共同拥有的
    def __init__(self, name, age):
        self.name = name  # 实例变量/字段
        self.age = age
        self.hobby = '看美女'

    # 实例方法--- 对象调用,自动传参
    def x1(self):
        pass

    # 类方法--- 类调用自动传参
    @classmethod
    def x2(csl):
        pass

    # 静态方法(普通函数)--- 普通的函数,需要手动传参
    @staticmethod
    def x3():
        pass


# 调用准则:静态属性由类调用,实例属性,由对象调用
# 实例化对象
obj = People(name='abc', age=18)
# 对象调用实例方法
obj.x1()
# 类调用静态字段
print(People.country)

3.2 案例二

class A:
    company_name = '老男孩教育'  # 静态变量(静态字段)
    __iphone = '1353333xxxx'  # 私有静态变量(私有静态字段)
    def __init__(self,name,age): #特殊方法
        self.name = name  #对象属性(字段)
        self.__age = age  # 私有对象属性(私有字段)
    def func1(self):  # 普通方法
        pass
    def __func(self): #私有方法
        print(666)
    @classmethod  # 类方法
    def class_func(cls):
        """ 定义类方法,至少有一个cls参数 """
        print('类方法')
    @staticmethod  #静态方法
    def static_func():
        """ 定义静态方法 ,无默认参数"""
        print('静态方法')
    @property  # 属性
    def prop(self):
        pass

3.3 类的其他成员

这里的其他成员主要就是类方法:

  • 方法包括:普通方法、静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同。

实例方法

  • ​ 定义:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法);
  • ​ 调用:只能由实例对象调用。

类方法

  • ​ 定义:使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法);
  • ​ 调用:实例对象和类对象都可以调用。

静态方法

  • ​ 定义:使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法;
  • ​ 调用:实例对象和类对象都可以调用。

双下方法(后面会讲到)

  •  定义:双下方法是特殊方法,他是解释器提供的 由爽下划线加方法名加爽下划线 __方法名__的具有特殊意义的方法,双下方法主要是python源码程序员使用的,
  •  我们在开发中尽量不要使用双下方法,但是深入研究双下方法,更有益于我们阅读源码。
  • 调用:不同的双下方法有不同的触发方式,就好比盗墓时触发的机关一样,不知不觉就触发了双下方法,例如:__init__

4. self是什么

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

5. 调用准则

  • 静态属性由类调用,实例属性,由对象调用,否则需要自己手动传参

6. 面向对象的三大特性

  • 封装
  • 继承
  • 多肽

7. 对象找类的属性准则

  • 对象查找属性的顺序:先从对象空间找 ———> 类空间找 ———> 父类空间找 ———->…..
  • 类名查找属性的顺序:先从本类空间找 ———-> 父类空间找————> ……..
  • 上面的顺序都是单向不可逆,类名不可能找到对象的属性。

8. 面向对象编写准则

  • 归纳类似的方法
    • 归纳相同的参数,用__init__统一传参                                                

9. 对象赋值,类赋值

对象赋值:不会改变类中的静态字段值,改的仅仅是自己的对象中的值

类赋值:会改变类中静态字段的值


网站公告

今日签到

点亮在社区的每一天
去签到