对象

一、概念

:具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.

对象:万物皆对象

关系

类包含属性和方法

类是对像的模板

对象是类的事例

二、语法

class 类名:

属性

对象属性-->私有  共有

类属性-->私有  共有

方法

<1>公有方法

<2>私有方法

<3>属性方法

<4>静态方法

三、封装

创建对象

创建对象:属性写在类外的情况,通过对象.属性,对象.方法()的方式调用 

<1>无参函数的调用(需要每个去赋值,比较啰嗦)

例:

[python]  view plain  copy
  1.    
  2. class Person:  
  3.     #属性   方法  
  4.     ''''' 
  5.     def声明方法的标识 
  6.     eat 函数名 方法名 
  7.     () 形参列表 形参:形式列表 (定义概念) 
  8.     self 第一个参数 默认是当前对象的引用=地址指向 
  9.     '''  
  10.     def eat(self):  
  11.         print('人在方法')  
  12.     def sleep(self):  
  13.         print('吃完睡觉')  
  14. if '__main__'.__eq__(__name__):  
  15.     zhangsan=Person()  
  16.     zhangsan.eat()  
  17.     zhangsan.sleep()  

执行命令得

[python]  view plain  copy
  1.    
  2. 人在方法  
  3. 吃完睡觉  

初始化:

<2>__init__(self):系统自动调用初始化方法,先生成对像,再调用此方法,再将对象赋值给引用名

用法:

def __int__(self,v_name,v_age):

    self.name=v_name

    self.age=v_age

有参函数的调用(可以直接全部赋值,比较简洁)

例:

[python]  view plain  copy
  1.    
  2. class Person:  
  3.     ''''' 
  4.     带参-函数 
  5.     '''  
  6.     def __init__(self,name,age):  
  7.         self.name=name  
  8.         self.age=age  
  9.         print('__init__ Person')  
  10.     def eat(self):  
  11.         print(self.name+'在吃饭')  
  12.     def sleep(self):  
  13.         print(self.name+'吃完睡觉')  
  14.     def hello(self):  
  15.         print('大家好,我是'+self.name+'  今年',self.age)  
  16. if '__main__'.__eq__(__name__):  
  17.     zhangsan=Person('张三',19)#直接赋值参数  
  18.     zhangsan.eat()  
  19.     zhangsan.sleep()  
  20.     zhangsan.hello()  

执行命令得

[python]  view plain  copy
  1.    
  2. __init__ Person  
  3. 张三在吃饭  
  4. 张三吃完睡觉  
  5. 大家好,我是张三  今年 19  

<3>重写;当需求系统自带不能满足时需要用到重写,即自己编写的规则

__str__():

    return  xxx

[python]  view plain  copy
  1.    
  2. class Person:  
  3.     def __init__(self,name,age):  
  4.         self.name=name  
  5.         self.age=age  
  6.     def __str__(self):  
  7.         #object 所有数据类型的基类 父类  
  8.         return 'name:'+self.name+'age:'+str(self.age)  
  9. if '__main__'.__eq__(__name__):  
  10.     zhangsan=Person('张三',19)  
  11.     print(zhangsan)  
  12.     print(str(zhangsan))#对上面未声明__str__函数时输出结果与 id相同  
  13.     print(zhangsan.__str__())  
  14.     print(id(zhangsan))  

执行命令得

[python]  view plain  copy
  1.    
  2. name:张三age:19  
  3. name:张三age:19  
  4. name:张三age:19  
  5. 90743856  

<4>属性相对于类来说属于全局 即:每个方法都可以调用

get/set方法:不写__init__()方法

set_name(self,new_name):

    self.name=new_name

get_name(self);

    return self.name

解释性语言:不需要预定义  随时创建随时使用

[python]  view plain  copy
  1.    
  2. class Student:  
  3.     def set_name(self,name):  
  4.         self.name=name  
  5.     def get_name(self):  
  6.         return self.name  
  7. stu=Student()  
  8. stu.set_name("abc")#边执行边解释 或者写成 stu.name='abc'  
  9. print(stu.get_name())  

执行命令得

[python]  view plain  copy
  1.    
  2. abc  

 封装

[python]  view plain  copy
  1.    
  2. class Person:  
  3.     def setage(self,new_age):  
  4.         ''''' 
  5.         封装的意义  doc 注释==>文档注释 
  6.         :param new_age: 新的年龄 0--100 
  7.         :return: None 
  8.         '''  
  9.         if new_age<0 or new_age>100:  
  10.             print('超出年龄限制 默认18')  
  11.             self.__age__=18  
  12.         else:  
  13.             self.__age__=new_age  
  14. if '__main__'.__eq__(__name__):  
  15.     zhangsan=Person()  
  16.     zhangsan.setage(1000)  
  17.     print('age:',zhangsan.__age__)  

执行命令得

[python]  view plain  copy
  1.    
  2. 超出年龄限制 默认18  
  3. age: 18  

四、

<1>公有方法;从外部直接调取的都是公有

私有方法:只能在内部调用,外部不允许访问(可以调用不是绝对的,一切靠自觉)

               例如:__private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs

<2>自动销毁方法:

1.__del__():

 xxx

当独想没有引用的时候,或程序结束的时候,程序自动调用__del__()

2.del 引用  科颜氏删除时自动调用__del__()

3.程序结束时自动调用__del__()

[python]  view plain  copy
  1.    
  2. class Person:  
  3.     def __show__(self):  
  4.         print('哈哈')  
  5.     def __del__(self):#自动删除  
  6.         print('对象被删除..资源被释放')  
  7. if '__main__'.__eq__(__name__):  
  8.     zhangsan=Person()  
  9.     zhangsan.__show__()  
  10.     lisi=zhangsan  
  11.     del zhangsan#手动删除  
  12.     for i in range(5):  
  13.         print(i)  

执行命令得

[python]  view plain  copy
  1.    
  2. 哈哈  
  3. 0  
  4. 1  
  5. 2  
  6. 3  
  7. 4  
  8. 对象被删除..资源被释放  

<3>测试一个对象有多少个引用(有多少引用指向同一块空间)

import sys#导入

t=T()#引用

sys.getrefcount(t)返回 从2开始  #ref 引用传递

[python]  view plain  copy
  1.    
  2. import sys  
  3. class Person:  
  4.     def __show__(self):  
  5.         print('哈哈')  
  6. if '__main__'.__eq__(__name__):  
  7.     zhangsan=Person()  
  8.     zhangsan.__show__()  
  9.     lisi=zhangsan  
  10.     print(sys.getrefcount(zhangsan))  

执行命令得

[python]  view plain  copy
  1.    
  2. 哈哈  
  3. 3  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值