代码Python入门(九、面向对象)

#!/usr/bin/env python
# -*- coding: UTF-8 -*-


class Critter:    # 定义类
    """A virtual pet"""
    total = 0   # 创建类特性 ,类似c++类的静态变量, 该赋值语句只会被执行一次

    @staticmethod    # 静态方法修饰符
    # 创建静态方法, 参数列表中无self ,因为静态方法都是通过类来调用(而不是通过对象)
    # 即静态方法无法传递指向某个对象的引用
    def status():
        print("\nThe total number of critters is", Critter.total)

    def __init__(self, name, mood):   # 构造方法
        print("A new critter has been born!")
        self.name = name     # 公共特性
        self.__mood = mood    # 私有特性
        Critter.total += 1    # 每有一个新对象创建, 类特性total 加 1

    @property     # 属性可以精确控制特性的访问或修改方式
    def mood(self):      # 创建属性,获取私有特性的读取访问
        return self.__mood

    @mood.setter     # 用于创建属性值设置器的修饰符,表示name属性的setter特性,提示接下来的方法的作用是设置mood属性
    def mood(self, new_mood):     # 创建属性,获取私有特性的写入访问
        if new_mood == "":
            print("A critter's name can't be the empty string.")
        else:
            self.__mood = new_mood
            print("Name change successful.")
    
    def __str__(self):     # 为该对象创建其字符串表示方式:当对象被打印时会显示这个字符串
        rep = "Critter object\n"
        rep += "name:" + self.name + "\n"
        return rep

    def __private_method(self):    # 创建私有方法
        print("This is a private method.")

    def public_method(self):  # 访问私有方法
        print("This is a public method.")
        self.__private_method()

    def talk(self):     # 定义方法
        print("\nHi. I'm", self.name)
        print("Right now I feel", self.__mood, "\n")
        print("Right now I feel", self.mood, "\n")  # self.mood用于访问属性,其实是在调用方法mood()

# 程序主体
crit1 = Critter("Poochie")     # 实例化对象
crit1.talk()       # 调用对象的方法

print(crit1.mood)    # 访问对象的mood属性
print(crit1._Critter__mood)  # 在类定义外部访问私有特性
crit1._Critter__private_method()  # 在类定义外部访问私有方法

print("\nAttempting to change crit1's name to sad..")
crit1.mood = "sad"       # 访问该对象的mood属性,对__mood进行写入(修改)
print(crit1.mood)     

crit2 = Critter("Randolph")
crit2.talk()

# 访问类特性
print(Critter.total)
print(crit1.total)    # 每个对象都可以读取其所属类的类特性
Critter.status()      # 调用静态方法

print("Printing crit1:")
print(crit1)
print("Directly accessing crit1.name :")
print(crit1.name)



猜你喜欢

转载自blog.csdn.net/ydc_ss/article/details/80032411