初识面向对象

了解一些名词:类、对象、实例、实例化

类:具有相同特征的一类事物(人、狗、老虎)

对象/实例:具体的某一个事物(隔壁阿花、楼下旺财)

实例化:类——>对象的过程

在python中,用变量表示特征,用函数表示技能,因而具有相同特征和技能的一类事物就是‘类’,对象是则是这一类事物中具体的一个。

定义类:
'''
class 类名:
    '类的文档字符串'
    类体
'''

#我们创建一个类
class Data:
    pass
class Person:   #定义一个人类
    role = 'person'  #人的角色属性都是人
    def walk(self):  #人都可以走路,也就是有一个走路方法,也叫动态属性。#self是默认的,必加的
        print("person is walking...")

def 函数名():
    '''函数体'''
    pass

# class Person: 
#     country = '中国'   #静态属性、数据属性
#     def walk(self):    #动态属性、函数属性、方法。self是默认的,必加的。
#         print('walk')

类名有两个作用:
1.属性引用

静态属性的引用:

# print(Person.country) #静态属性的查看
print(Person.walk)  #引用人的走路方法,注意,这里不是在调用
# Person.role = '人'  #添加一个新静态属性
# Person.country = '印度'  #修改一个新静态属性
# del Person.role #删除一个静态属性

查看类名的所有属性:

print(dir(Person))

类能完成的第二个功能:实例化对象
实例化:从一个类中创造一个具体的对象的过程

实例化:类名加括号就是实例化,可以用它来为每个实例定制自己的特征

实例化的过程就是类——>对象的过程 语法:对象名 = 类名(参数)

class Person:
    country = "中国"
    def walk(self):
        print("%s is working" %self.name)

p = Person()
print(p)

输出:
<__main__.Person object at 0x000001B56220B0F0>

如何让对象拥有具体的属性(初始化过程):
#__init__方法:初始化方法,可以没有。给对象添加一些必要的基础属性

class Person:
    country = "中国"
    def walk(self):
        print("%s is working" %self.name)

    def __init__(self, life_value, aggr, name, job):
        self.lv = life_value     #属性,对象属性
        self.aggr = aggr
        self.name = name
        self.job = job
p = Person(1000,2,"金老板","boss")  #如何让对象拥有具体的属性
# 查看对象的属性:
print(p.lv)  #Person的对象
print(p.aggr)  #Person的对象
print(p.name)  #Person的对象
print(p.job)  #Person的对象、

输出:
1000
2
金老板
boss

 对象/实例只有一种作用:属性引用

一次性看到对象内的所有属性:
# print(p.__dict__)

class Person:
    country = "中国"
    def walk(self):
        print("%s is working" %self.name)

    def __init__(self, life_value, aggr, name, job):
        self.lv = life_value     #属性,对象属性
        self.aggr = aggr
        self.name = name
        self.job = job
p = Person(1000,2,"金老板","boss")  #如何让对象拥有具体的属性
# 查看对象的属性:
# print(p.lv)  #Person的对象
# print(p.aggr)  #Person的对象
# print(p.name)  #Person的对象
# print(p.job)  #Person的对象

# 一次性看到对象内的所有属性:
print(p.__dict__)

输出;
{'lv': 1000, 'aggr': 2, 'name': '金老板', 'job': 'boss'}

对象调用一个方法: p.walk()  # Person.walk(p)

class Person:
    country = "中国"
    def walk(self):
        print("%s is working" %self.name)

    def __init__(self, life_value, aggr, name, job):
        self.lv = life_value     #属性,对象属性
        self.aggr = aggr
        self.name = name
        self.job = job
p = Person(1000,2,"金老板","boss")  #如何让对象拥有具体的属性

p.walk()  #对象的调用

输出:
金老板 is working

对象属性的增删改查有2套标准:
这种好!

class Person:
    country = "中国"
    def walk(self):
        print("%s is working" %self.name)

    def __init__(self, life_value, aggr, name, job):
        self.lv = life_value     #属性,对象属性
        self.aggr = aggr
        self.name = name
        self.job = job
p = Person(1000,2,"金老板","boss")  #如何让对象拥有具体的属性

p.sex = 'lady_boy'  #添加一个属性
print(p.sex)
p.sex = 'girl'  #属性的修改
print(p.sex)    #属性的删除
del p.sex

输出:
lady_boy
girl

第二种(了解)

# print(p.__dict__['lv']) #查看
# p.__dict__['lv'] = 998  #对象名.__dict__中的属性值可以被修改
# p.__dict__['sex'] = 'lady_boy' #对象名.__dict__中的属性值可以增加
# p.__dict__.pop('sex')  #对象名.__dict__中的属性值可以被删除
# print(p.__dict__)
查看:
# print(p.__dict__,p.sex)

#类

# 类的定义 class关键字 类名的首字母大写

# 类中直接定义属性:静态属性(变量) 和 动态属性(函数)

# 类名的两个作用:属性的引用,实例化对象

# 类名和属性的操作:         对象名.属性名         对象名.__dict__['属性名'](不能修改)

#实例化 ——类名(参数)

#构造方法:造对象 #初始化__init__:给这个赤裸裸的对象添加一些属性 __init__ #返回了一个初始化之后的对象

#self的含义:就是这个对象本身

#对象和属性的操作:对象名.属性名 对象名.__dict__['属性名']

对象调用一个方法: p.walk()            # Person.walk(p)

class 类名:
    def __init__(self,参数1,参数2):
        self.对象的属性1 = 参数1
        self.对象的属性2 = 参数2

    def 方法名(self):pass

    def 方法名2(self):pass

对象名 = 类名(1,2)  #对象就是实例,代表一个具体的东西
                  #类名() : 类名+括号就是实例化一个类,相当于调用了__init__方法
                  #括号里传参数,参数不需要传self,其他与init中的形参一一对应
                  #结果返回一个对象
对象名.对象的属性1   #查看对象的属性,直接用 对象名.属性名 即可
对象名.方法名()     #调用类中的方法,直接用 对象名.方法名() 即可

#对象就是实例,代表一个具体的东西                  

#类名() : 类名+括号就是实例化一个类,相当于调用了__init__方法                  

#括号里传参数,参数不需要传self,其他与init中的形参一一对应                  

#结果返回一个对象 对象名.对象的属性1  

#查看对象的属性,直接用 对象名.属性名 即可 对象名.方法名()    

#调用类中的方法,直接用 对象名.方法名() 即可

类命名空间与对象、实例的命名空间

创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性

而类有两种属性:静态属性和动态属性 •静态属性就是直接在类中定义的变量 •动态属性就是定义在类中的方法

 面向对象的交互:

人狗大战:

class Person:
    def __init__(self, life_value, aggr, name, job):
        self.lv = life_value
        self.ag = aggr
        self.name = name
        self.job = job

    def attack(self, dog_obj):
        dog_obj.lv = dog_obj.lv - self.ag
        print("%s 攻击了 %s, %s 余血 %d" % (self.name, dog_obj.name, dog_obj.name, dog_obj.lv))

class Dog:
    def __init__(self, life_value, aggr, name, kind):
        self.lv = life_value
        self.ag = aggr
        self.name = name
        self.kind = kind
    def bite(self, person_obj):
        person_obj.lv = person_obj.lv - self.ag
        print("%s 咬了 %s, %s 余血 %d"%(self.name, person_obj.name, person_obj.name, person_obj.lv))



tiedan = Dog(1000, 100, "铁蛋", "土狗")
boss_gold = Person(100, 2, "太白太亮", "old_diver")

boss_gold.attack(tiedan)
tiedan.bite(boss_gold)

输出:
太白太亮 攻击了 铁蛋, 铁蛋 余血 998
铁蛋 咬了 太白太亮, 太白太亮 余血 0
原文地址:https://www.cnblogs.com/biluo/p/7856446.html