python面向对象之类和对象

一. 类和对象

类:具有相同属性和方法的一类事物就是类

对象和类的关系:

  对象是一个实实在在存在的事物,是独一无二的

  类是一个抽象的大致规范了一类事物的范围

#面向对象编程
    #有一个抽象的过程
    #结果不能预测
    #上帝视角
class Person:
    role='人'                       #静态属性
    country='中国'
    def attack(self):               #动态属性,方法
        pass


print(Person.role)
print(Person.attack)                 #方法调用
Person.role='人类'                  #属性修改
print(Person.__dict__['role'])
hantao=Person()                     #对象
print(hantao.role)
hantao.name='hantao'               #对象创建属性
print(hantao.name)
egg=Person()
egg.name='egon'
print(egg,hantao)
  1.类中可以有任意python代码,这些代码在类定义阶段便会执行
  2.因而会产生新的名称空间,用来存放类的变量名与函数名,可以通过 类名.__dict__ 查看
  3.对于经典类来说我们可以通过该字典操作类名称空间的名字(新式类有限制),但python为我们提供专门的.语法
  4.点是访问属性的语法,类中定义的名字,都是类的属性
*************************************************************************************************
#类加上括号的过程: 实例化 #先加上创建一个空对象 #再执行__init__,同时把创建的对象放在__init__参数里 #实例化对象

#使用init进行属性的初始化
#1.规范所有的对象都拥有一些基础的属性
#2.方便
class Dog:
    def __init__(self,name,type):
        self.name=name
        self.type=type
        self.HP=2000

    def bite(self,name):
        print('%s咬了%s'%(self.name,name))


wangcai=Dog('旺财','中华田园犬')
print(wangcai.__dict__)
wangcai.bite('hantao')
#python为类内置的特殊属性
类名.__name__# 类的名字(字符串)
类名.__doc__# 类的文档字符串
类名.__base__# 类的第一个父类(在讲继承时会讲)
类名.__bases__# 类所有父类构成的元组(在讲继承时会讲)
类名.__dict__# 类的字典属性
类名.__module__# 类定义所在的模块
类名.__class__# 实例对应的类(仅新式类中)

 

#类型dict就是类dict
>>> list
<class 'list'>

#实例化的到3个对象l1,l2,l3
>>> l1=list()
>>> l2=list()
>>> l3=list()

#三个对象都有绑定方法append,是相同的功能,但内存地址不同
>>> l1.append
<built-in method append of list object at 0x10b482b48>
>>> l2.append
<built-in method append of list object at 0x10b482b88>
>>> l3.append
<built-in method append of list object at 0x10b482bc8>

#操作绑定方法l1.append(3),就是在往l1添加3,绝对不会将3添加到l2或l3
>>> l1.append(3)
>>> l1
[3]
>>> l2
[]
>>> l3
[]
#调用类list.append(l3,111)等同于l3.append(111)
>>> list.append(l3,111) #l3.append(111)
>>> l3
[111]
python中一切皆为对象,且python3中类与类型是一个概念,类型就是类

 

小练习:

创建计算圆的面积周长

from math import pi

class Circle:
    def __init__(self,r):
        self.r=r

    def s(self):
        return self.r**2*pi

    def c(self):
        return 2*pi*self.r

c1=Circle(3)
print(c1.s())
print(c1.c())

二. 交互

class Dog:
    counter=0
    def __init__(self,name,type,aggr):
        self.name=name
        self.type=type
        self.life_value=2000
        self.aggr=aggr
        Dog.counter+=1

    def bite(self,person_name):
        print('%s咬了%s'%(self.name,person_name.name))
        person_name.life_value-=self.aggr

class Person:
    rol = '人'         #数据属性、静态属性、类属性
    country = '中国'
    def __init__(self,name,age,life_value): #初始化方法
        self.name = name       #属性、对象属性
        self.theage = age
        self.life_value = life_value
        self.aggr = 1

    def attack(self,dog_obj):  #函数属性、动态属性、方法
        print('%s打了%s'%(self.name,dog_obj.name))
        dog_obj.life_value-=self.aggr

egg=Dog('egon','二哈',20)
hantao=Person('hantao',18,500)
print(hantao.life_value)
egg.bite(hantao)
print(hantao.life_value)
hantao.attack(egg)

 

posted @ 2018-02-27 09:24  Hantaozi  阅读(90)  评论(0编辑  收藏  举报