面向对象编程

本节内容

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定义的属性与父类重名,则只在自己的作用域中找

 

 

posted @ 2018-05-20 08:57  Python少年  阅读(266)  评论(0编辑  收藏  举报