self,__init__()方法,__str__()方法

使用self替换方法中的对象名

class Cat:
# 方法
def eat(self):
print(“猫在吃鱼…”)

def drink(self):
    print("猫在喝可乐...")

def introduce(self):
    # print("名字是:%s, 年龄是:%d" % (汤姆的名字, 汤姆的年龄))
    # print("名字是:%s, 年龄是:%d" % (tom.name, tom.age))
    print("名字是:%s, 年龄是:%d" % (self.name, self.age))

#创建了一个对象
tom = Cat()
tom.name = “汤姆”
tom.age = 30
tom.eat()
tom.drink()
print(tom.name)
print(tom.age)
print("-"*30)
tom.introduce()

print("="*30)

#创建了另外一个对象
lan_mao = Cat()
lan_mao.name = “蓝猫”
lan_mao.age = 20
lan_mao.introduce() # 相当于lan_mao.introduce(lan_mao)
一个较为完整的程序
class Cat:
# 方法
def eat(self):
print("%s在吃鱼…" % self.name) # 这里换成self

def drink(self):
    print("%s在喝可乐..." % self.name)  # 这里换成self

def introduce(self):
    # print("名字是:%s, 年龄是:%d" % (汤姆的名字, 汤姆的年龄))
    # print("名字是:%s, 年龄是:%d" % (tom.name, tom.age))
    print("名字是:%s, 年龄是:%d" % (self.name, self.age))

#创建了一个对象
tom = Cat()
tom.name = “汤姆”
tom.age = 30
tom.eat()
tom.drink()
print(tom.name)
print(tom.age)
print("-"*30)
tom.introduce()

print("="*30)

#创建了另外一个对象
lan_mao = Cat()
lan_mao.name = “蓝猫”
lan_mao.age = 20
lan_mao.introduce() # 相当于lan_mao.introduce(lan_mao)
lan_mao.eat()
lan_mao.drink()
总结
所谓的self,可以理解为自己
可以把self当做C++中类里面的this指针一样理解,就是对象自身的意思
某个对象调用其方法时,python解释器会把这个对象作为第一个参数传递给self,所以开发者只需要传递后面的参数即可
self仅仅是一个变量名,也可将self换为其他任意的名字,但是为了能够让其他开发人员能明白这变量的意思,因此一般都会self当做名字

init()方法
class Cat:

# 方法
def __init__(self, new_name, new_age):
    """在创建完对象之后 会自动调用, 它完成对象的初始化的功能"""
    # self.name = "汤姆"  # 如果这里写"汤姆"的话,只要是用这个Cat创建的任何对象,都叫做“汤姆”,因此不能使用
    # self.age = 20
    self.name = new_name
    self.age = new_age

def eat(self):
    print("%s在吃鱼...." % self.name)

def drink(self):
    print("%s在喝可乐..." % self.name)

def introduce(self):
    # print("名字是:%s, 年龄是:%d" % (汤姆的名字, 汤姆的年龄))
    # print("名字是:%s, 年龄是:%d" % (tom.name, tom.age))
    print("名字是:%s, 年龄是:%d" % (self.name, self.age))

#创建了一个对象
tom = Cat(“汤姆”, 30) # “汤姆”, 30这2个参数会自动传递到__init__方法中
#给对象tom添加了一个属性,叫name,里面的值是"汤姆"
#tom.name = “汤姆”
#tom.age = 30
tom.eat()
tom.drink()
print(tom.name)
print(tom.age)
print("-"*30)
tom.introduce() # 相当于tom.introduce(tom)

print("="*30)

lan_mao = Cat(“蓝猫”, 20)
#lan_mao.name = “蓝猫”
#lan_mao.age = 20
lan_mao.introduce() # 相当于lan_mao.introduce(lan_mao)
lan_mao.eat()
lan_mao.drink()
总结
init()方法,在创建一个对象时默认被调用,不需要手动调用
init(self)中,默认有1个参数名字为self,如果在创建对象时传递了2个实参,那么__init__(self)中出了self作为第一个形参外还需要2个形参,例如__init__(self,x,y)
init(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递进去

str()方法

  1. 打印id()
    如果把BMW使用print进行输出的话,会看到如下的信息
    在这里插入图片描述

即看到的是创建出来的BMW对象在内存中的地址

  1. 定义__str__()方法
    class Cat:
    “”“定义一个猫类”""

    def init(self, new_name, new_age):
    “”“在创建完对象之后 会自动调用, 它完成对象的初始化的功能”""
    # self.name = “汤姆”
    # self.age = 20
    self.name = new_name
    self.age = new_age # 它是一个对象中的属性,在对象中存储,即只要这个对象还存在,那么这个变量就可以使用
    # num = 100 # 它是一个局部变量,当这个函数执行完之后,这个变量的空间就没有了,因此其他方法不能使用这个变量

    def str(self):
    “”“返回一个对象的描述信息”""
    # print(num)
    return “名字是:%s , 年龄是:%d” % (self.name, self.age)

    def eat(self):
    print("%s在吃鱼…" % self.name)

    def drink(self):
    print("%s在喝可乐…" % self.name)

    def introduce(self):
    # print(“名字是:%s, 年龄是:%d” % (汤姆的名字, 汤姆的年龄))
    # print(“名字是:%s, 年龄是:%d” % (tom.name, tom.age))
    print(“名字是:%s, 年龄是:%d” % (self.name, self.age))

#创建了一个对象
tom = Cat(“汤姆”, 30)
print(tom)
总结
在python中方法名如果是__xxxx__()的,那么就有特殊的功能,因此叫做“魔法”方法
当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据
__str__方法需要返回一个字符串,当做这个对象的描写

猜你喜欢

转载自blog.csdn.net/PG_peng/article/details/84552348