【面向对象1】------- PYTHON基础8

57 阅读5分钟

@TOC

一、面向对象

1. 概念

==“类”:== 具有某些相同属性的一个集合。eg:将“人”定义为一个“类”。 ==“对象”:== 具有某些相同属性的一个集合中的一个元素,某个“类”当中的一个实体。eg:男生。 ==“面向对象编程”:== 是一种封装的思想,它可以更好地模拟真实世界里的事物(将其视为对象)。并把描述特征的数据和代码块(函数)封装到一起。 eg:可以先创建一个“人类”的概念,然后在这个概念当中再创建具体的某一个人(即一个对象),或者多个不同的人(即多个对象)。 最后再定义某个人可以做什么事(即这个人可以实现什么样的功能)。 ==属性:== 类中的所有变量称为属性。(比如人的大脑,四肢,五官等等) ==方法:== 类中的所有函数通常称为方法。(比如大脑有思考的功能,眼睛可以观看世界等等) ==常用名称:== class,init,self,object等。 ==三大特性:== 封装,继承,多态。 若在某游戏中设计一个乌龟(turtle)的角色。 使用面向对象的思想会更简单,可以分为如下两个方面进行描述:

  1. 从乌龟的表面特征(属性)来描述,例如:绿色的、有 4 条腿、重 10 kg、有外壳,等
  2. 从所具有的的行为(方法)来描述,例如,它会爬、会吃东西 ''' 将乌龟用代码来表示, 乌龟的表面特征(属性)可以用变量来表示 乌龟的行为特征(方法)可以用函数来表示
'''
class Turtle: # 定义一个Turtle类   一般大写首字母
    #定义属性---变量
    bodyColor = "绿色"  #颜色是绿色
    footNum = 4        #有4条腿
    weight = 10        #重 10 kg
    hasShell = True    #有外壳

    #定义方法---函数
    #会爬
    def crawl(self):
        print("爬行")

    #会吃东西
    def eat(self):
        print("吃东西")

“类”: class 类名: ''' 类定义的说明文档。主要说明该类的作用,可以通过help函数输出此部分的内容 ''' # 类体 ''' #此处编写类的属性和方法 ''' 注意: 1,无论是属性还是方法,对于类来说都不是必需的 2,类中属性和方法的位置是任意的,它们之间并没有固定的前后次序 3,同属一个类的所有属性和方法,要保持统一的缩进格式 4,和变量名一样,类名本质上就是一个标识符,在给类起名时,需要符合标识符的规则 eg: python 允许创建空类,但没有任何意义.

class Person:  # 定义一个人类
    '''
    这是一个Person类的定义
    '''
    pass
class Person:  # 定义一个人类
    '''
    这是一个Person类的定义
    '''
    #定义属性---变量
    age = 0  # 类属性,表示人的年龄,默认为0岁
    name = '某某某'  # 类属性,表示人的名字,默认为某某某
    weight = 18  # 类属性,表示人的体重,默认为18公斤

    #定义方法---函数
    def my_name(self):
        print('我的名字是:', self.name)

    def learn(self):
        print("在学习")

    def walk(self):
        print("在走路")

    def think(self, a, b):
        print(a, ' + ', b, ' = ', a + b)

    def Information(self):
        print("%s今年%d岁,体重%d公斤" % (self.name, self.age, self.weight))

# 创建两个“对象”,分别是Someone_1和Someone_2
Someone_1 = Person()
Someone_2 = Person()

# 调用对象的属性:
# 输出属性
print(Someone_1.name)
print(Someone_1.age)
print(Someone_1.weight)

print(Someone_2.name)
print(Someone_2.age)
print(Someone_2.weight)

#调用对象的方法:
Someone_1.my_name()
Someone_1.walk()
Someone_1.learn()

Someone_2.learn()
Someone_2.think(1, 2)
Someone_2.Information()

输出

某某某
0
18
某某某
0
18
我的名字是: 某某某
在走路
在学习
在学习
1  +  2  =  3
某某某今年0岁,体重18公斤

2. 类构造方法

用类创建一个实例对象时,我们希望在创建的同时给对象的某些属性赋一个==初值==。这就需要在类中添加一个 ==init()== 方法。该方法是一个特殊的类实例方法,称为构造方法(或构造函数)。构造方法用于创建对象时==被自动调用==。

def __init__(self, ...):      # 注意,此方法的方法名中,开头和结尾各有 2 个下划线,
# 且中间不能有空格代码块

==注意: 1,即便不添加__init__函数,Python 也会自动为类添加一个仅包含 self 参数的构造方法。 2,仅包含 self 参数的 init() 构造方法,又称为类的默认构造方法。==

class Person:  # 定义一个Person类
    '''
    这是一个Person类的定义
    '''
    def __init__(self):  # __init__函数
        print("自动调用了构造方法")
    def walk(self):
        print("可以走路的")

a = Person()  # 构建对象的同时直接调用了__init__函数

输出

自动调用了构造方法

init() 构造方法中,除了 self 参数外,还可以自定义其它参数。 参数之间使用逗号“,”进行分割。

class Person:  # 定义一个Person类
    role = 'person'  # 类属性,表示人类这个类的role都是person
    
def __init__(self, name):  # __init__函数
        print("自动调用了构造方法",name)

    def walk(self):
        print("可以走路的")

a= Person(name='小强')  # 构建对象的同时,给对象的属性name赋值
b= Person(name='小h')

# a= Person('小强')  # 构建对象的同时,给对象的属性name赋值
# b= Person('小h')   # 去掉name也可以

输出

自动调用了构造方法 小强
自动调用了构造方法 小h

==注意: 虽然构造方法中有 self、name这2个参数,但实际需要传参的仅有 name。 也就是说,self 不需要手动传递参数。==

class Person:  # 定义一个Person类
    role = 'person'  # 类属性,表示人类这个类的role都是person
    
def __init__(self, name):  # __init__函数
        print("自动调用了构造方法",name)

    def walk(self):
        print("可以走路的")

a= Person(name='小强')  # 构建对象的同时,给对象的属性name赋值
b= Person(name='小h')
class Person:  # 定义一个Person类
    role = 'person'  # 类属性,表示人类这个类的role都是person
    def __init__(self, name,eight,age,sex,location):  # __init__函数
        print("自动调用了构造方法",name,eight,age,sex,location)

a= Person('zhangsan',170,30,'man','shanghai')