Python中的self是什么你知道嘛?

简介: 在Python类中规定,函数的第一个参数是实例对象本身,并且约定俗成,把其名字写为self。其作用相当于java中的this,表示当前类的对象,可以调用当前类中的属性和方法。

11.3 self介绍


这个self是自定义的,完全可以换成别的变量名

  • self和对象指向同一个内存地址,可以认为self就是对象的引用。
  • self就是这个类的实例对象
  • self就相当于Java中的this
  • 所谓self,可以理解为对象自己,某个对象自己,某个对象调用其方法时,Python解释器会把这个对象作为第一个参数传递给self,所以开发者只需要传递self之后的参数即可。


11.4 魔术方法


  • 在Ptython中,有一些内置好的特定的方法,方法名的左右别 "__" 包围,在进行特定的操作时会自动调用,这些方法称之为没魔术方法。

下面是几种常见的魔术方法:

  • _ _init _ _ 方法 : 初始化一个类,在创建实例对象为其赋值使用。
  • _ str_ 方法:在将对象转换成字符串str(对象)测试的狮虎,打印对象信息。
  • _ new_ 方法:创建并返回一个实例对象,调用了一次,就会得到一个对象。
  • _ _class__方法 : 获取已知对象的类(对象. _ _calss _ _)
  • _ _del__方法:对象在程序运行结束后进行对象销毁的时候调用这个方法,来释放资源。


11.4.1 _ str_ 方法:返回指定格式的类实例对象


# 类的全部组成
class Animal(object):
    # 给init函数传递指定的参数。这个方法相当于Java的构造方法
    # 这个方法是在类实例化对象的时候自动调用的
    def __init__(self, name, age, type):
        self.name = name
        self.age = age
        self.type = type
    # 这个方法相当于Java中在实体类中声明的 toString() 方法
    def __str__(self):
        """
        指定打印对象的格式,声明这个方法后,在打印对象的时候就不是地址,
        而是这个方法中指定的格式
        :return: 对象的信息
        """
        return '名字:{},年龄:{},类型{}'.format(self.name, self.age, self.type)
    def eat(self, food):
        """
        这个函数中的 self 相当于是Animal这个类。存在这个类中的所有属性
        定义在类的实例方法中的属性称为实例属性
        """
        # 类中的实例方法只能访问到类中的实例属性
        print('小猫的年龄是:{},喜欢的食物是:{}'.format(self.age, food))
        # print(age),在实例方法中不能直接访问到类属性
        pass
    pass
# 定义动物的实例对象
cat = Animal('花花', '3', '虎斑')
print(cat)
# 名字:花花,年龄:3,类型虎斑
复制代码


11.4.2 _ new_ 方法:创建类实例对象时候调用的方法


# 类的全部组成
class Animal(object):
    # 给init函数传递指定的参数。这个方法相当于Java的构造方法
    # 这个方法是在类实例化对象的时候自动调用的
    def __init__(self, name, age, type):
        self.name = name
        self.age = age
        self.type = type
    # 这个方法相当于Java中在实体类中声明的 toString() 方法
    def __str__(self):
        """
        指定打印对象的格式,声明这个方法后,在打印对象的时候就不是地址,
        而是这个方法中指定的格式
        :return: 对象的信息
        """
        return '名字:{},年龄:{},类型{}'.format(self.name, self.age, self.type)
    # 这个方法是在创建实例对象的时候执行的,每调用一次就会生成一个新的对象 cls 就是class的缩写
    # 在我们没有写这个方法的时候,python在创建类实例的时候会自动调用这个方法,
    # 写了这个方法之后就调用这个方法
    # cls参数此时代表的就是类:Animal
    def __new__(cls, *args, **kwargs):
        """
        创建类实例对象的方法
        使用场景:可以控制创建对象的一些属性限定,经常用来做单列模式的时候使用
        :param args:
        :param kwargs:
        """
        print('=====__new__()=========')
        return object.__new__(cls) # 这里是真正创建对象实例的
    def eat(self, food):
        """
        这个函数中的 self 相当于是Animal这个类。存在这个类中的所有属性
        定义在类的实例方法中的属性称为实例属性
        """
        # 类中的实例方法只能访问到类中的实例属性
        print('小猫的年龄是:{},喜欢的食物是:{}'.format(self.age, food))
        # print(age),在实例方法中不能直接访问到类属性
        pass
    pass
# 定义动物的实例对象
cat = Animal('花花', '3', '虎斑')
print(cat)
# =====__new__()=========a
# 名字:花花,年龄:3,类型虎斑
复制代码


11.4.3 _ new_ 和 _ _init__方法的区别


  • new函数是类的实例化方法,必须返回该实例,否则创建不成功
  • new至少存在一个参数cls,这个参数就是代表要实例化的类,此参数在实例化时由python解释器自动提供
  • init用做数据属性的初始化工作,相当于Java中的构造函数
  • new函数的执行要早于init函数



相关文章
|
4月前
|
Python
Python 中的 self 是什么?
【8月更文挑战第29天】
388 5
|
7月前
|
Java 程序员 编译器
Python 为什么要保留显式的 self ?
Python 为什么要保留显式的 self ?
59 2
|
7月前
|
Python
Python类(class)中self的理解
Python类(class)中self的理解
119 0
|
7月前
|
算法 开发者 Python
【Python 基础扫盲 】self参数、__init__方法和.__str__方法的用处和区别?
【Python 基础扫盲 】self参数、__init__方法和.__str__方法的用处和区别?
496 0
|
C++ 开发者 Python
46 python - self
46 python - self
37 0
|
程序员 编译器 Python
python之self的正确理解和访问限制的有关内容
python之self的正确理解和访问限制的有关内容
|
Python
Python的self作用,以及__init__,__new__
Python的self作用,以及__init__,__new__
57 0
|
算法 IDE 开发工具
【Python语法】类型提示(self, nums: List[int]) -> List[int],报错NameError: name ‘List‘ is not defined解决
【Python语法】类型提示(self, nums: List[int]) -> List[int],报错NameError: name ‘List‘ is not defined解决
|
C++ Python
python类中初始化形式:def __init__(self)和def __init__(self, 参数1,参数2,,,参数n)区别
python类中初始化形式:def __init__(self)和def __init__(self, 参数1,参数2,,,参数n)区别
173 0
|
Python
python中关于 name 'self' is not defined这种错误解决方法
python中关于 name 'self' is not defined这种错误解决方法
126 0
python中关于 name 'self' is not defined这种错误解决方法