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]
小练习:
创建计算圆的面积周长
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)

浙公网安备 33010602011771号