类
对象
这里的 “对象” 不是你的 “对象”,英文单词是 Object,至于为什么翻译成对象我们不去追究,我们需要知道的是 “Python 中的一切都是对象”,不管你是字符串,函数还是类,都是对象。
一个对象主要就是有属性和方法,属性是说这个东西是什么,方法是说这个东西能做什么
面向对象
面向对象(OOP),是现在编程的主流。面向对象编程可以看作是一种在程序中包含各种独立且又互相调用的对象的思想,这个和传统正好相反,传统的思想主张将程序直接看作是一系列对计算机下达的指令,而面向对象编程中的每一个对象都应该能够接受数据,处理数据并且能将数据传达给其它对象,因此它们每一个都可以看作是一个小型的机器,即对象。
目前来说面向对象编程推广了程序的灵活性和可维护性,并且在大型项目设计中广为应用。当我们提到面向对象的时候,它不仅仅是指一种程序设计方法,更多意义上是一种程序开发方式。
类
《维基百科》中的定义:在面向对象编程中,类 (class) 是一种面向对象计算机编程语言的构造,是创建对象的蓝图,描述了所创建的对象共同的属性和方法。
类是对某一群具有同样属性和方法的对象的抽象,比如长翅膀会飞的的生物,我们把它们统一称为 “鸟”
对于类更严格点的定义是由某种特定的元数据所组成的内聚的包。它描述了一些对象的行为规则,而这些对象就被成为该类的实例。类有接口和结构,接口描述了如何通过方法与类及其实例互相操作,而结构描述了一个实例中数据如何划分为多个属性。
类的出现,为面向对象编程的三个最重要的特性(封装,继承,多态)提供了实现的手段。
伪代码
class 小姐姐:
皮肤 = 白色
发色 = 黑色
唱歌()
跳舞()
我们定义了一个叫小姐姐的类,后面没有带括号的是属性,带括号的是方法,其中的属性和方法,默认是所以的小姐姐都具有,这个类仅仅是对小姐姐们的通常抽象,并不是指某个具体的谁谁谁。
对于一个具体的小姐姐,比如西施,她就是上面定义的小姐姐这个类的具体化,这在编程中称为 “小姐姐” 类的实例:
西施 = 小姐姐()
用上面的方式就是将 ”小姐姐“ 类实例化了,所谓的实例,就是一个具体的东西。对于西施这个实例,就可以具体化一些属性,比如发色,还可以用一些具体的方法,比如唱歌,通常用 “.” 的方式,比如 西施.皮肤,就得到白色。
- 定义类
class Person:
"""
具有通常类的结构的 Person 类
"""
def __init__(self,name):
self.name = name
def get_name(self):
return self.name
def get_sex(self,sex):
per_sex = {}
per_sex[self.name] = sex
return per_sex
关键字class,声明创建一个名字是‘Person’的类(规范:首字母大写。若是两个单词,则两个单词的首字母均要大写,如HotDog)。
class中self是默认的第一个参数,且def里都有参数self,这个正是类中函数的特色,为了跟我们以前学过的函数区别开来,一般在类里的函数我们不叫它们函数,而叫它们 “方法”。
def init(self,name):这是一个特殊的方法,以双下划线开头和结尾,这样的方法其实在类里面还有很多,统一叫它们 “特殊方法”。对于 init() 还有一个别的名字,叫 “构造函数”,也有叫它是 “初始化方法” 的,个人认为第二个更好一点,因为单从字面上来看,它对应的含义应该是初始化。所谓的初始化,就是让类有一个基本的样子,而不是里面什么也没有,很多事情都要初始化,让事情有一个具体的起点状态,比如你要吃饭,碗里得先有饭。在用类创建实例的时候,首先执行的是初始化方法。
接下来的 def get_name(self) 和 def get_sex(self,sex) 是类里面的另外两个方法,这两个方法除了第一个参数必须是 self 以外,其它跟函数没有什么区别。你只需要注意的是,两个方法中都用到了 self.name,属性的这种调用方式只能在类里面使用。
2.类的实例
类是对象的定义,实例才是真实的东西。比如 “人” 是一个类,但是 “人” 终究不是具体的某个会喘气的,只有 “yyj” 才是具体的东西,但他是具有 “人” 这个类所定义的属性和方法。“yyj” 就是 “人” 这个类的实例。
if __name__ == "__main__":
boy = Person('yyj')
print(boy.name)
name = boy.get_name()
print(name)
his_sex = boy.get_sex('男')
print(his_sex)
其中 self 是默认参数,不需要传值,name 则需要给它传值,所以用Person(‘yyj’) 的样式。
boy 就是一个实例,它有属性和方法,self.name 是它的属性,boy.get_name() 和 boy.get_sex(‘男’) 是通过实例来调用方法。
刚才是以 boy = Person(‘yyj’) 的方式创建了一个实例,仿照这个样式还可以建立更多的实例,比如 girl = Person(‘xishi’) 等,也就是说,一个类可以创建多个实例。