类 / 对象
来源:互联网 发布:斯巴达英雄java游戏 编辑:程序博客网 时间:2024/06/07 23:31
创建一个类
类的名称: 标识符的命名规则,见名知意, 首字母大写, 然后遵从驼峰命名法
类的属性: 标识符的命名规则,见名知意 ,驼峰命名法
类的方法: 标识符的命名规则,见名知意, 驼峰命名法格式:
class 类名(父类列表):
属性(变量)
行为(方法)
class Add(object): # 属性 name = 'chu' age = 20 weight = 130 # 方法(行为) def eat(self): print('%s真能吃'%self.name)# 创建对象# 格式: 变量名(对象名) = 类名(参数列表)pp = Add()# 访问属性# 格式: 对象名.属性名print(pp.name)# 修改属性pp.age = 200print(pp.age)# 访问方法pp.eat()
构造方法
根据需要构造一个类出来
通常使用来做数据的初始化工作,在类创建的时候自动调用
class Add(object): # 构造属性 def __init__(self,name,age,weight): self.name = name self.age = age self.weight = weight def eat(self): print('%s真能吃'%self.name)# 传入参数,跟构造的属性一一对应pp = Add('chu',18,120)# 访问属性和方法的结构不变print(pp.name)pp.eat()
析构函数
# 当对象释放的时候自动调用,释放函数 def __del__(self): print("析构函数")
重写str
把属性所对应的值和属性一块输出来,方便用户的查看
在调用print打印对象时自动调用,是给用户用的,是一个描述对象的方法
class Add(object): def __init__(self,name,age,weight): self.name = name self.age = age self.weight = weight def eat(self): print('%s真能吃'%self.name) # 重写str def __str__(self): # 初始化 return 'name = %s, age = %d, weight = %d'%(pp.name,pp.age,pp.weight)pp = Add('chu',18,120)print(pp)print('name = %s, age = %d, weight = %d'%(pp.name,pp.age,pp.weight))name = chu, age = 18, weight = 120name = chu, age = 18, weight = 120
访问限制
属性前加两个下划线
需要通过set/get的方法进行操作
对象属性和类属性
class Person(object): # 在类中的(非方法里)属于类属性(用类名来表示) age = 100 def __init__(self,age): # 在方法中的属性属于对象属性(用对象来调用) self.age = ageprint(Person.age)p = Person(200)# 对象属性的优先级高于类属性print(p.age)# 删除对象中的属性时,在调用会使用同名的类属性del p.ageprint(p.age)# 以后千万不要对象属性与类属性重名,# 因为 对象属性会屏蔽掉类属性,但是当删除对象属性后,又能使用类属性
释放私有属性 @property
把私有属性变为共有的,可以随意访问
class chu(object): def __init__(self,name,age): self.name = name self.__age = age # 类似于set/get方法,但是又好像是set/get的反操作 @property def age(self): return self.__age @age.setter def age(self,age): self.__age = agecc = chu('chu',23)print(cc.name)# 可以访问了print(cc.age)
动态添加方法
from types import MethodType# 定义空的类class Person(object): # __slots__用来限制属性, 值为元组形式 __slots__ = ("age","name","say")# 创建对象# 动态的给对象添加属性,这是动态语言的特性(灵活)# 动态添加的属性只对当前对象生效, 对于类创建的对象没有用p = Person()p.age = 30print(p.age)# 动态创建方法def say(self): print("%s正在说话"%(self.name))p = Person()p.name = "tom"# #动态的添加方法p.say = say# # 调用p.say(p)# 动态的添加函数def say(self): print("%s正在说话"%(self.name))p = Person()p.name = "tom"p.say = MethodType(say,p)p.say()# 需要限制class的属性# python是允许在定义class的时候,定义一个特殊的变量 __slots__变量,来限制class添加属性p = Person()p.hello = 10print(p.hello)p.age = 10print(p.age)
阅读全文
0 0
- 类 & 对象
- 类,对象
- 类 对象
- 类,对象
- 类,对象
- 类对象
- 类 / 对象
- 【面向对象】对象和类
- 面向对象--类和对象
- 对象、类、对象引用、实例
- 面向对象(类,对象,方法)
- 面向对象(类和对象)
- OOP-----类与对象对象
- OOP-----类与对象对象
- 类、对象和面向对象
- 面向对象-类和对象
- 对象与元类对象
- 面向对象----类和对象
- //以下代码在Delphi7 + XP SP3下测试通过 //button1为注册钩子屏蔽,button2为卸载钩子取消屏蔽F1 unit Unit1; interface uses Windo
- 1033. 旧键盘打字(20)
- 编程从键盘输入n,然后机算并输出1+2+3+...+n的值
- 1011. World Cup Betting (20)
- OpenCV 相关报错
- 类 / 对象
- ubuntu16.04中安装下载工具uget+aria2并配置Firefox
- Java流之缓冲流
- 训练日记
- Qt Charts 之 QChart Class
- 第三章 队列【数据结构】【链队列】【循环队列】
- 实现点击图片下载
- 1036. 跟奥巴马一起编程(15)
- 计算1!+2!+3!+...+n!