目录
一、看一段代码,并分析问题
class Dog:
name="波斯猫"
age=2
def info(self,name):
print(f"name信息:{name}") # 加菲猫
dog=Dog()
dog.info("加菲猫")
如果我们希望在成员方法内,访问对象的属性/成员变量,怎么办?-->self
class Dog:
name="波斯猫"
age=2
def info(self,name):
print(f"name信息:{name}") # 加菲猫
# 如果希望访问到属性name,使用self.name即可
print(f"成员变量name:{self.name}") # 波斯猫
dog=Dog()
dog.info("加菲猫")
二、二说self
1、成员方法定义的基本语法
def 方法名(self,形参列表):
方法体
2、使用细节
1)在方法定义的参数列表中,有一个self
2)self是定义成员方法时,需要写上的,如果不写,则需要使用@staticmethod标注,否则会报错
class Dog:
name="藏獒"
age=2
def info(self,name):
print(f"name信息:{name}")
# 静态方法
@staticmethod
def ok():
print("ok()...")
dog=Dog()
dog.info("德牧")
# 调用静态方法
# 方式1:通过对象调用
dog.ok()
# 方式2:通过类名调用
Dog.ok()
3)self表示当前对象本身,简单的说,哪个对象调用,self就代表哪个对象
class Dog:
name="藏獒"
age=2
def hi(self):
print(f"hi self:{id(self)}")
# self表示当前对象本身
#创建对象dog2
dog2=Dog()
print(f"dog2:{id(dog2)}")
dog2.hi()
print("--------------------")
#创建对象dog3
dog3=Dog()
print(f"dog3:{id(dog3)}")
dog3.hi()
4)当我们通过对象调用方法时,self会隐式的传入
5)在方法内部,要访问成员变量和成员方法,需要使用self
class Dog:
name="藏獒"
age=2
def eat(self):
print(f"{self.name} 饿了")
def cry(self,name):
print(f"{name} is crying")
print(f"{self.name} is crying")
self.eat()
# 不能直接调用
# eat()
dog=Dog()
dog.cry("金毛")