python基础之定义类和对象详解

python基础之定义类和对象详解

定义简单的类

面向对象是更大的封装,在一个类中封装多个方法,这样通过这个类创建出来的对象,就可以直接调用这些方法了!

定义只包含方法的类

在python中,要定义一个只包含方法的类,语法格式如下:

#用class定义类名 class 类名: def 方法1(self,参数列表) #方法的属性中有且仅有一个self pass def 方法2(self,参数列表) #类之外定义的def是函数,在类里面定义的def叫做方法,而且括号里必须要有self pass class Student: pass

方法的定义格式和之前学习过的函数几乎一样区别在于第一个参数必须是self 

创建对象
当一个类定义完成之后,要使用这个类来创建对象,语法格式如下:
对象变量名=类名()

第一个面向对象程序

需求: 小猫爱吃鱼,小猫要喝水

分析: 1.定义一个猫类(Cat) 2.定义两个方法ect和drink 3.按照需求--不需要定义属性 class Cat: #Cat为类的名称(类名),又一个或多个单词组成,每个单词首字母大写,其余字母小写 """这是一个猫类""" def ect(self): #定义方法 print("小猫爱吃鱼") def drink(self): print("小猫要喝水") tom=Cat() #创建类的对象 # big_tom=Cat() 每个类可以有多个对象,每个对象都会开辟新的存储空间id tom.ect() #对象调用类中封装的方法,对象名.方法名() tom.drink() #对象调用类中封装的方法

使用self在方法内部输出每一只猫的名字 

由哪一个对象调用的方法,方法内self就是哪一个对象的引用

1.在类封装的方法内部,self就表示当前调用方法的对象自己

2.调用方法时,程序员不需要传递self参数

在方法内部:

1.也可以通过self访问对象的属性

2.也可以通过self调用其他的对象方法

#改造代码如下 class Cat: def eat(self): print("%s 爱吃鱼"%self.name) tom=Cat() tom.name="Tom" tom.eat() lazy_cat=Cat() lazy_cat.name="大懒猫" lazy_cat.eat()

在日常开发中,不推荐在类的外部给对象增加属性,如果在运行时,没有找到属性,程序就会报错,对象应该包含有哪些属性,应该封装在类的内部 

class Student: def __init__(self,name,age): self.name=name self.age=age print("我的名字叫",name,"今年岁数是",age) xiaoming=Student("小明",20) xiaohong=Student("小红",18)

 类的创建

#类的创建: class Student: native_place="吉林" #类属性 def __init__(self,name,age): #name,age为实例属性 self.name=name self.age=age def eat(self): print("我正在吃饭...") #实例方法 def info(self): print("我的名字叫:",self.name,"年龄是:",self.age) #类方法 @classmethod def cm(cls): print("类方法") #静态方法 @staticmethod def sm(): print("静态方法") #对象的创建,创建Student类的对象 stu1=Student("张三",20) #创建对象 stu1.info() #对象调用类方法 stu1.eat() print("我的名字叫",stu1.name,"今年的岁数是:",stu1.age,stu1.eat) print(stu1)

类属性、类方法、静态方法

类属性:类中方法外的变量成为类属性,被该类的所有对象所共享

类方法:使用@calssmethod修饰方法,使用类名直接访问的方法

静态方法:使用@staticmethod修饰主法,使用类名直接访问的方法 

print(Student.native_place) #访问类属性 Student.cm() #调用类方法 Student.sm() #调用静态方法 stu3=Student("张三",20) stu4=Student("李四",30) print(stu3.native_place) #吉林 print(stu4.native_place) #吉林 Student.native_place="天津" #改变类属性 print(stu3.native_place) #天津 print(stu4.native_place) #天津 总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注易知道(ezd.cc)的更多内容!      

推荐阅读