面向对象编程
本节内容
1.声明类与实例化的格式书写
2.属性
3.解密self
4类属性的增删改查
5.静态属性property(其实就是数据属性,把函数属性变成数据属性直接通过点就可访问)
6.类方法classsmethod (不通过实例就用类的方法,不与实例捆绑)
7.静态方法 staticmethod (类的工具包,不跟类绑定,也不跟实例绑定)
8.组合:几个类组合在一起(做类跟类的间接关联)
面向过程的程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式。
面向对象的程序设计:核心是对象二字
类:把一类事物相同的特征和动作整合到一起
对象:就是具体的存在,基于类而创建的一个具体的事物也是特征和动作整合到一起
实例化:类生成对象
1.声明类与实例化的格式书写
class ‘类名’ #规范首字母大写 '类的文档字符串' 类体 p1 = 类名() #实例化一个类
2.属性
用来描述着一类事物,类的对象指的是着一类事物的一个个体,是事物就要有属性,属性分为:数据属性(就是变量)、函数属性(就是函数,在面向对象里边通常称方法)
注意:类和对象均用点来访问自己的属性
class People: '该类为人类' start = 'earth' def tutan(): print('吐痰') print(People.start) #earth print(People.__dict__) #查看类的属性字典 print(dir(People)) #查看类属性,列表形式更多 print(People.__dict__['start']) #通过属性字典方位自己的属性 People.tutan() People.__dict__['tutan']() print(People.__name__) #查看类名 print(People.__doc__) #查看类的文档注释 print(People.__base__) #查看类People的父类 print(People.__bases__) #与上同,但是元组显示 print(People.__module__) #查看类在哪个模块
3.解密self
为什么凡是类中定义的方法都要加一个self参数呢?
原因:若不把self参数传进去,则在实例化的时候实例的对象会自动把自己传进去,而他定义的方法无参数,则报错
4类属性的增删改查
函数属性命名规则:v+n (动词+名词)
class ChinesePeople: country = 'China' def __init__(self,name): self.name = name def play_ball(self,ball): print('play ball%s' %ball) print(ChinesePeople.country) #查看类属性 ChinesePeople.country='world' #改类属性 ChinesePeople.eat = 'rise' #增加类属性(rise不存在时) del ChinesePeople.dang #删
5.静态属性property(其实就是数据属性,把函数属性变成数据属性直接通过点就可访问)
class ChinesePeople: country = 'China' def __init__(self,name): self.name = name @property #play_ball = property(play_ball) def play_ball(self): print('play ball') p1 = ChinesePeople('haha') p1.play_ball #打印play ball
6.类方法classsmethod (不通过实例就用类的方法,不与实例捆绑)
class ChinesePeople: country = 'China' def __init__(self,name): self.name = name @classmethod #play_ball = classmethod(play_boy) def play_ball(cls): print('play ball') ChinesePeople.play_ball() #不用穿参数
7.静态方法 staticmethod (类的工具包,不跟类绑定,也不跟实例绑定)
class ChinesePeople: country = 'China' def __init__(self,name): self.name = name @staticmethod def play_ball(): print('play ball') ChinesePeople.play_ball() #实例与属性都可调用 p1 = ChinesePeople('aa') p1.play_ball()
8.组合:几个类组合在一起(做类跟类的间接关联)
class Hand: pass class Foot: pass class Trunk: pass class Person: def __init__(self,id_num,name,hand,foot,trunk): self.id_num = id_num self.name = name self.hand = Hand() self.foot = Foot() self.trunk = Trunk()
注意:若子类Person定义的属性与父类重名,则只在自己的作用域中找