python_面向对象编程
程序员文章站
2022-05-17 16:40:05
初始面向对象 一、类的实例化: 二、对象属性的查找顺序:先找对象自己的名称空间 》类的名称空间 三、绑定方法的特殊之处: 小练习 class People: def __init__(self, name, aggressiveness, life_value): self.name = name ......
初始面向对象
一、类的实例化:
调用类产生对象的过程称为类的实例化,
实例化的结果是一个对象,或称为一个实例
class people: def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex def run(self): print('%s is running' % self.name) obj = people('carter', 18, 'male') # 会产生对象的名称空间,如何查看 print(obj.__dict__)
print(obj.name)
实例化做了三件事
1、先产生一个空对象
2、自动触发类内部__init__函数的执行
3、将空对象,以及调用类括号内传入的参数,一同传给__init__,为对象定制独有的属性
对象的增删改查
obj.hobby = 'beauty' # 增加 del obj.name # 删除 obj.age = '20' # 修改 print(obj.__dict__) # 查找
二、对象属性的查找顺序:先找对象自己的名称空间----》类的名称空间
class people: x=1 def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex def run(self): #self=obj print('%s is running' %self.name) #obj.name obj=people('carter',18,'male') #people.__init__(obj,'carter',18,'male') obj1=people('carter1',18,'male') #people.__init__(obj,'carter1',18,'male') obj2=people('carter2',18,'male') #people.__init__(obj,'carter2',18,'male') #1、类的数据属性:是给对象用的,而且直接共享给所有对象用的,内存地址都一样 print(people.x) people.x=11111 print(id(people.x),people.x) obj.x='obj================》' print(id(obj.x),obj.x) print(id(obj1.x),obj1.x) print(id(obj2.x),obj2.x) # 2、类的函数属性:也是给对象用,但是绑定给对象用的,绑定到不同的对象就是不同的 # 绑定方法,内存地址都不一样,但其实只想都是同一个功能 print(people.run) # <function people.run at 0x00000226e7c78a60> people.run(123123) people.run(obj) print(obj.run) print(obj1.run) print(obj2.run)
三、绑定方法的特殊之处:
1、 绑定给谁就应该由谁来调用,
2、谁来调用就会把谁当做第一个参数传入
class people: x=1 def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex def run(self): #self=obj print('%s is running' %self.name) #obj.name def f1(): print('from f1') def f2(self): pass obj=people('carter',18,'male') #people.__init__(obj,'carter',18,'male') obj.run() obj1.run() obj2.run() print(people.f1) people.f1() print(obj.f1) obj.f1() #people.f1(obj)
小练习
class people: def __init__(self, name, aggressiveness, life_value): self.name = name self.aggressiveness = aggressiveness self.life_value = life_value def bite(self, enemy): enemy.life_value -= self.aggressiveness print(""" [%s]咬了一条[%s] 狗掉血[%s] 狗还剩血量[%s] """ % (self.name, enemy.name, self.aggressiveness, enemy.life_value)) class dog: def __init__(self, name, aggressiveness, life_value): self.name = name self.aggressiveness = aggressiveness self.life_value = life_value def bite(self, enemy): enemy.life_value -= self.aggressiveness print(""" [%s]咬了一个[%s] 人掉血[%s] 人还剩血量[%s] """ % (self.name, enemy.name, self.aggressiveness, enemy.life_value)) p1 = people('人', 60, 100) d1 = dog('狗', 80, 200) p1.bite(d1) d1.bite(p1)
from math import pi class circle: ''' 定义了一个圆形类; 提供计算面积(area)和周长(perimeter)的方法 ''' def __init__(self,radius): self.radius = radius def area(self): return pi * self.radius * self.radius def perimeter(self): return 2 * pi *self.radius circle = circle(10) #实例化一个圆 area1 = circle.area() #计算圆面积 per1 = circle.perimeter() #计算圆周长 print(area1,per1) #打印圆面积和周长
上一篇: 私有属性/方法的访问
下一篇: vue点击按钮给商品按照价格进行倒叙