Python类中的self到底是干啥的

Python编写类的时候,每个函数参数第一个参数都是self,一开始我不管它到底是干嘛的,只知道必须要写上。后来对Python渐渐熟悉了一点,再回头看self的概念,似乎有点弄明白了。

首先明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的。self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。

self名称不是必须的,在python中self不是关键词,你可以定义成a或b或其它名字都可以,但是约定成俗(为了和其他编程语言统一,减少理解难度),不要搞另类,大家会不明白的。

下例中将self改为myname一样没有错误:

class Person:
    def _init_(myname,name):
        myname.name=name
    def sayhello(myname):
        print ‘My name is:‘,myname.name
p=Person(‘Bill‘)
print p

self指的是类实例对象本身(注意:不是类本身)。

‘‘‘
遇到问题没人解答?小编创建了一个Python学习交流QQ群:×××
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
‘‘‘
class Person:
    def _init_(self,name):
        self.name=name
    def sayhello(self):
        print ‘My name is:‘,self.name
p=Person(‘Bill‘)
print p

在上述例子中,self指向Person的实例p。 为什么不是指向类本身呢,如下例子:

class Person:
    def _init_(self,name):
        self.name=name
    def sayhello(self):
        print ‘My name is:‘,self.name
p1=Person(‘Bill‘)
p2 = Person(‘Apple‘)
print p1

如果self指向类本身,那么当有多个实例对象时,self指向哪一个呢?

总结

self在定义时需要定义,但是在调用时会自动传入。

self的名字并不是规定死的,但是最好还是按照约定是用self

self总是指调用时的类的实例。

原文地址:https://blog.51cto.com/14246112/2448916

时间: 2024-10-10 08:08:31

Python类中的self到底是干啥的的相关文章

Python 类中的 self?

什么是 self ? 它是类实例自身的引用.其他语言通常使用一个名为 this 的标识符 --<Python核心编程> 如何定义类: class ClassName(base_class[es]):  (1) "optional documentation string" static_member_declarations #类静态成员声明 method_declarations #类方法声明 (1) 括号内位基类,如果没有,就实用object作为基类 .....待续 P

两幅图说明python类中self的含义

总结:self是对于对象自身的引用.这里的圆括号里的self也可以换成其它你想要的任意名称,只是self更形象和通用些. 两幅图说明python类中self的含义

Python类中实例属性的通用显示工具

0.说明 以下的思想方法非常有用,可以帮助你在Python开发提高开发和维护效率,所以可能的话,请仔细琢磨一下其中的代码. 之前在用Python编写一个类时,为了显示的友好性,总是需要在每个类中重载__str__或者__repr__方法,现在有了更好的方法,不需要在每个类中都这么做了,下面给出的方法非常实用. 下面使用的例子使用的Python版本都是Python3.5,但实际上在Python2.7中进行也没有任何影响. 1.正常情况下类实例的不友好显示 在Python中编写一个类时,由于没有重载

python类中super()和__init__()的区别

本文和大家分享的主要是python开发中super()和__init__()的区别,希望通过本文的分享,对初学者学习这部分内容有所帮助. 1.单继承时super()和__init__()实现的功能是类似的 class Base(object): def __init__(self): print 'Base create' class childA(Base): def __init__(self): print 'creat A ', Base.__init__(self) class chi

python 类中的某个函数作为装饰器

在python的类中,制作一个装饰器的函数, class A: def wrapper(func): ###装饰器 def wrapped(self,*arg,**kwargs) ... return wrapped @ wrapper ###装饰mix def mix(): ... 当调用mix的时候,self.mix() ,会将self等参数传入 wrapper 中来吗?答案为否. 当wrapper作为装饰器的并且@wrapper这种方式作为装饰的时候,wrapper就跟普通的函数一样,仅仅

@property在python类中的应用

1.在类中,有时需要限制输入的内容,可以用一个set来输入需要的内容,用get来取得输入的内容 2.其实说白,上述所说的方法就是用来检查输入内容,让人们不能随心所欲的设置了. 参见下面的例子: 1 class Student(object): 2 def get_score(self): 3 return self.__score 4 def set_score(self, value): 5 if not isinstance(value, int): 6 raise ValueError("

python类中几个特殊方法

class TT: def __init__(self): print "__init__" def __call__(self): print "__call__" def __str__(self): return "__str__" def __int__(self): return "__int__" def __add__(self,other): return "__add__" def __s

Python类中的魔法方法之 __slots__

在类中每次实例化一个对象都会生产一个字典来保存一个对象的所有的实例属性,这样非常的有用处,可以使我们任意的去设置新的属性. 每次实例化一个对象python都会分配一个固定大小内存的字典来保存属性,如果对象很多的情况下会浪费内存空间. 可通过__slots__方法告诉python不要使用字典,而且只给一个固定集合的属性分配空间 class Foo(object): __slots__ = ("x","y","z") def __init__(sel

Python类中反射的作用

#coding:utf-8 ''' #反射的基本用法: hasattr 判断一个方法是否存在于实例中 getattr 指定一个方法名字,获取该方法的内存地址,加"()"括号并可执行 ''' import sys class WebServer(object): def __init__(self,host,port): self.host = host self.port = port def start(self): print("Server is starting...