Python中的self用法详解

阅读: 评论:0

Python中的self⽤法详解
在Python类中规定,函数的第⼀个参数是实例对象本⾝,并且约定俗成,把其名字写为self。其作⽤相当于java中的this,表⽰当前类的对象,可以调⽤当前类中的属性和⽅法。
class是⾯向对象的设计思想,instance(也即是 object,对象)是根据 class 创建的。
广西气象局天气预报⼀个类(class)应该包含数据和操作数据的⽅法,通俗来讲就是属性和函数(即调⽤⽅法)。
类 class 中为啥⽤使⽤ self ?
在类的代码(函数)中,需要访问当前的实例中的变量和函数,即访问Instance中的:
对应的变量(property):Instance.ProperyNam,去读取之前的值和写⼊新的值。
调⽤对应函数(function):Instance.function(),即执⾏对应的动作。
福州市景点排名大全-> ⽽需要访问实例的变量和调⽤实例的函数,当然需要对应的实例Instance对象本⾝。
-> ⽽Python中就规定好了,函数的第⼀个参数,就必须是实例对象本⾝,并且建议,约定俗成,把其名字写为self。
-> 所以,我们需要self(需要⽤到self)。
⾸先,在Python中类的定义:
在python中,类是通过关键字 class 定义的:
class 后⾯紧跟类名,即 Person,类名通常⼤写字母开头,紧接着是(object),表⽰该类是从哪个类继承下来的,通常,如果没有合适的继承类,就使⽤ object 类,这是所有类最终都会继承的类。
class Person(object):
pass
将 Person类实例化,创建实例化是通过类名+() 实现的。
class Person(object):
pass
student = Person()  # 创建类的实例化
print(student)
print(Person)
可以看到,变量 student 指向的就是⼀个 Person的 object,后⾯的 0x0000026EE434D8D0 是内存地址,每个 object 的地址都不⼀样,⽽ Person 本⾝则是⼀个类。
也可以给实例变量绑定属性,⽐如:为 student 绑定 name 和 score 属性
class Person(object):
pass
student = Person()
# print(student)
# print(Person)
student.name = "Gavin"  # 为实例变量
student 绑定 name 属性类似于赋值操作
student.score = 100    # 为其绑定
score 属性
print(student.name)p
rint(student.score)
上述的⽅法虽然可以为类的实例变量绑定属性,但是不够⽅便和elegant , 由于类可以起到模板的作⽤,故在创建实例的时候,可以将我们认为必须绑定属性强制填写进去,在python中,是通过类中通常都会使⽤的⼀个⽅法,即def __init__(self)⽅法,在创建实例变量的时候,就把 name 和 score 等属性绑上去。
class Person(object):
def __init__(self,name,score):
self.name = name
self.score = score
student = Person('Gavin',100)  # 传⼊ __init__ ⽅法中需要的参数
print(student.name)
print(student.score)
传⼊空参数的情况,会报错:
class Person(object):
def __init__(self,name,score):
self.name = name
self.score = score
student = Person()  # 此处应该有参数传⼊,却没有传
print(student.name)
print(student.score)
锦州旅游景点大全
注意:
1、__init__ ⽅法的第⼀个参数永远是 self ,表⽰创建的实例本⾝,因此,在 __init__ ⽅法的内部,就可以把各种属性绑定到self,因为 self 就指向创建的实例本⾝。
2、使⽤了 __init__ ⽅法,在创建实例的时候就不能传⼊空的参数了,必须传⼊与 __init__ ⽅法匹配的参数,但是 self 不需要传,python解释器会⾃⼰把实例变量传进去。
在类中定义多个函数相互调⽤
class Person(object):
def __init__(self,x,y):
self.x = x
self.y = y
def add(self):
sum = self.x + self.y
return sum
def square(self):
squr = pow(self.x,2)+pow(self.y,2)
return squr
德令哈海拔def add_square(self):
c = self.add()+self.square()
return c
student = Person(3,4)print(student.add())
print(student.square())
print('--------- 我是可爱的分割线-----------')
print(student.add_square())
通过上述的例⼦可以看出,与普通的函数相⽐,在类中定义的函数只有两点不同:
1、第⼀个参数永远是 self ,并且调⽤时不⽤传递该参数
2、在类中函数相互调⽤要加 self ,如上例中: c = self.add()+self.square(), 不加 self ,会报错:函数未定义,看下图:
武汉到北京旅游团报价五日游
除此之外,类的⽅法和普通函数没甚区别,当然也可以使⽤默认参数、可变参数和关键字参数,例⼦如下:class Person(object):
def __init__(self,x,y):
self.x = x
self.y = y
def add(self,z=16):    # 设置默认变量 z =16,这只是个普通的局部变量,⾮实例变量,实例变量需要
self.z = z,这样定义
sum = self.x + self.y + z
return sum
def square(self):
squr = pow(self.x,2)+pow(self.y,2)
return squr
贵阳到黄果树瀑布一日游
def add_square(self,z):    # 调⽤时传⼊变量,这也是个普通的局部变量,⾮实例变量
c = self.add()+self.square() + z
return c
student = Person(3,4)
print(student.add())
print(student.square())
print('--------- 我是可爱的分割线-----------')
print(student.add_square(16))
看了上述的例⼦可能还是不明⽩ self 到底是个什么⿁,为啥要使⽤ self 这⿁东西?没关系,往下看:
其实 self 这家伙简单的说就是把 class 中定义的变量和函数变成实例变量和实例函数,作为类 class 的成员,使得成员间能互相调⽤,⽽不需要从外部调⽤数据(变量)和⽅法(函数),以实现数据的封装,以上⾯的 Person 类为例:
创建实例的时候需要给出实例变量 x,y, 调⽤函数时给出 z ,调⽤很容易,却不知道内部实现的细节。
总之,类是创建实例的模板,⽽实例则是⼀个⼀个具体的对象,各个实例拥有的数据都相互独⽴、互不影响;⽅法是与实例绑定的函数,和普通的函数不同,⽅法可以直接访问实例的数据。
其实 self 中存储的是实例变量和实例函数的属性,可以理解为⼀个字典( dict ),如:{'name':'zhang','age':'18'}就是这些。
注意只有数据属性,并没有创建新的类的⽅法。类----->通过实例化⽣成----对象---->(对象只是⼀串类似于字典的数据,没有把类的⾥的⽅法复制给你,python没有new这个⽅法!)
class Person(object):
def __init__(self,x,y):
self.x = x
self.y = y
def add(self,z=16):  # 设置 z 为实例变量,即
self.z = z, z 是 class 的⼀个成员了,⽽⾮普通局部变量
self.z = z
sum = self.x + self.y + z # z虽然已被实例化,但是依然可以当作普通变量来⽤    r
eturn sum
def square(self):
squr = pow(self.x,2)+pow(self.y,2)
return squr
def add_square(self):
c = self.add()+self.square() + self.z # 调⽤实例变量 z
return c
student = Person(3,4)
print(student.add())
print(student.square())
print('--------- 我是可爱的分割线-----------')
print(student.add_square())
print(student.z)    # 函数add 中的 z 被实例化以后,就可以利⽤实例化的⽅法访问它

本文发布于:2023-05-26 12:30:27,感谢您对本站的认可!

本文链接:http://www.035400.com/whly/3/437052.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:实例   变量   函数   属性
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2024-2030 Comsenz Inc.Powered by © 文化旅游网 滇ICP备2022007236号-403 联系QQ:1103060800网站地图