#!/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", "happy") # 实例化对象
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", "exciting")
crit2.talk()
# 访问类特性
print(Critter.total)
print(crit1.total) # 每个对象都可以读取其所属类的类特性
Critter.status() # 调用静态方法
print("Printing crit1:")
print(crit1)
print("Directly accessing crit1.name :")
print(crit1.name)
代码Python入门(九、面向对象)
最新推荐文章于 2024-04-28 16:07:12 发布