#!/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)
代码Python入门(九、面向对象)
猜你喜欢
转载自blog.csdn.net/ydc_ss/article/details/80032411
今日推荐
周排行