python_进阶_07


面向对象

第一个实战演练

# 需求:小猫爱吃鱼,小猫要喝水
# 定义一个猫类(Cat),定义两个方法(eat 和 drink)
# 类的命名需要大驼峰命名

class Cat:
    def eat(self):
        print("小猫爱吃鱼")
    def drink(self):
        print("小猫要喝水")
# 创建对象
tom = Cat()

tom.eat()
tom.drink()
print(tom)  # 可以看出变量引用的对象是哪一个类创建的对象,以及内存中的地址(十六进制表示),%d以10进制输出数字,%x是以16进制输出

==类只有一个,但可以用类创建不同的对象==

class Cat:
    def eat(self):
        print("小猫爱吃鱼")
    def drink(self):
        print("小猫要喝水")
# 创建对象
tom = Cat()

tom.eat()
tom.drink()
print(tom)

# 再创建一个猫对象
lazy_cat = Cat()
lazy_cat.eat()
lazy_cat.drink()

print(lazy_cat)

输出为

设置对象属性

class Cat:
    def eat(self):
        # 哪一个对象调用的方法,self就是哪一个对象的引用
        print("%s 爱吃鱼" % self.name)
    def drink(self):
        print("%s 要喝水" % self.name)
# 创建对象
tom = Cat()
# 可以使用 .属性名 利用赋值语句就可以了
# tom.name = "Tom"  不推荐在类的外部创建属性
tom.eat()
tom.drink()
print(tom)

# 再创建一个猫对象
lazy_cat = Cat()
# lazy_cat.name = "大懒猫"
lazy_cat.eat()
lazy_cat.drink()
print(lazy_cat)

输出为

在初始化方法内部定义对象的属性

class Cat:

    def __init__(self):
        print("这是一个初始化方法")

        # self.属性名 = 属性的初始值
        self.name = "Tom"
    def eat(self):
        print("%s 爱吃鱼" % self.name)

# 使用类名()创建对象的时候,会自动调用初始化方法__init__
tom = Cat()
tom.eat()
print(tom.name)

输出为

但是上述方法会把name属性固定死,应该在函数内部加上形参使函数变得灵活

class Cat:

    def __init__(self,new_name):
        print("这是一个初始化方法")

        # self.属性名 = 属性的初始值
        # self.name = "Tom"
        self.name = new_name
    def eat(self):
        print("%s 爱吃鱼" % self.name)

# 使用类名()创建对象的时候,会自动调用初始化方法__init__
tom = Cat("Tom")
tom.eat()
print(tom.name)

lazy_cat = Cat("大懒猫")
lazy_cat.eat()

str 函数

class Cat:
    def __init__(self,new_name):
        self.name = new_name
        print("%s 来了" % self.name)
    def __del__(self):
        # 是变量生命周期结束前执行的最后一个函数
        print("%s 去了" % self.name)
    def __str__(self):
        # 必须返回一个字符串
        return "我是小猫[%s]" % self.name
# Tom是一个全局变量
tom = Cat("Tom")
print(tom)

输出为


文章作者: 张忠楠
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 张忠楠 !
评论
  目录