python和尚念经:实例化对象、调用方法、最全属性、最全内置函数

一:先搞懂定义
class Ball:									#定义一个类
    def  __init__(self,name):				#初始化对象
        self.name = name
    def kick(self):							#方法
        print('我是%s' % self.name)

>>> a = Ball('足球')						#创建了一个对象
>>> a.kick()
我是足球

1、在开始定义时,称为类,class A...
2、定义写完了,定义的那个A就称为类对象
3、类对象赋给某个变量,就称这个变量为实例对象下x= Mydemo(),其中的x就称为实例对象
4、类属性是指类定义里面所有的属性如i、long、width,调用属性和调用方法的区别
Class.name调用属性,Class.name()调用方法
5、对象 = 属性(静态的特征——>变量,高、长、重量)+方法(动态动作——>函数,跑、跳 def run(self) def后面的就是方法)
6、 一个类可以实例化出无数的对象(实例对象) , Python 为了区分是哪个实例对象调用了方法,于是要求方法必须绑定(通过self参数)才能调用。而未实例化的类对象直接调用方法,因为缺少self参数,所以就会报错。
7、__init__(self)中的self参数,python解释器会自动把当前的对象引用传递进去, __init__(self)中,默认有1个参数名字为self,如果在创建对象时传递了2个实参,那么__init__(self)中除了self作为第一个形参外还需要2个形 参,例如__init__(self,x,y)

二:具体例子分析

1、弄懂实例化

class Person() :
   def name(self):
      print('小朋友')
运行:
>>> a = Person()			#Person是类对象,a是实例对象
>>> a.name()				#a.name = Person().name,相当于实例化对象调用方法name
小朋友
>>> b = Person			#这里Person没有括号,后面调用b.name()就提示错误
						#Person没加括号是没有创造新的实例
						#Person只表示符变为b,b.name()相当于Person.name()
						#方法name有参数self,意味着需要创建实例才能调用。见6,所以报错
>>> b.name()
TypeError: name() missing 1 required positional argument: 'self'
>>> c = Person()
>>> c.name						#c.name() 和c.name 有什么区别?
								#c=Person()虽然创建了实例
								#但是c.name并不是调用实例方法,只是调用其属性,见4
								#而c.name的属性本身就是一个类方法对象,所以才会返回对象
运行:
>>> <bound method Person.name of <__main__.Person object at 0x000001C8A1DC3D48>>
class Person:
class Person():					#类名后面带括号与不带括号有区别吗?
								#带不带括号无区别
								#括号是为了继承类用的,默认继承object类,不加会自动添加

三:python中的属性,普通方法的衍生。

【1】操作类属性有三种方法:
1.使用@property装饰器操作类属性。
2.使用类或实例直接操作类属性(例如:obj.name,obj.age=18,del obj.age)
3.使用python内置函数操作属性。


   1getattr(obj, name[, default]):访问对象的属性,如果存在返回对象属性的值,否则抛出AttributeError异常。
   2hasattr(obj,name):检查是否存在某个属性,存在返回True,否则返回False3setattr(obj,name,value):设置一个属性。如果属性不存在,会创建一个新属性,该函数无返回值。若存在则更新这个值。
   4delattr(obj, name):删除属性,如果属性不存在则抛出AttributeError异常,该函数也无返回值。

【2】Python内置类属性:

__dict__ : 类的属性(获取类所有信息):结果返回一个字典包含类属性及属性值,类方法等所有类信息
__doc__ :类的文档字符串,也就是类的帮助信息。
__name__: 类名
__module__: 类定义所在的模块 如果在当前模块返回’__main__’; 如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)
__bases__ : 类的所有父类(包含了所有父类组成的元组)
四:类与对象内置函数
1 .isinstance 
2. issubclass
3、操作对象属性时自动触发
__setattr__添加/修改属性会触发它的执行
__delattr__删除属性的时候会触发
__getattr__只有在使用点调用属性且属性不存在的时候才会触发
__getattribute__
4、 使用key的形式操作属性时触发
__setitem__使用key的形式添加/修改属性时触发
__getitem__ 使用key的形式获取属性时触发
__delitem__使用key的形式删除属性时触发
5.描述符,描述符可以检测到一个属性的访问和修改,从而对这些操作增加额外的功能逻辑;
__get__():调用一个属性时,触发
__set__():为一个属性赋值时,触发
__delete__():采用del删除属性时,触发
6.静态属性property,本质就是实现了get,set,delete三种方法
7.对象的显示相关函数
__str__调用str函数或者print函数时自动执行,返回值作为显示内容
__repr__调用repr或者交互式解释器输出对象是自动执行,返回值作为显示内容

#注意:
#如果`__str__`没有被定义,那么就会使用`__repr__`来代替输出 
#这俩方法的返回值必须是字符串,否则抛出异常

8.__format__调用format函数时自动执行,用于定制对象的格式化输出,
9.内存优化,__slots__
10.迭代器协议, __next__和__iter__
11.__doc__,帮助文档,隐藏属性,用于获取类的帮助文档,其实就是类下面的多行注释
12.__module__和__class__
__module__表示当前操作的对象在那个模块
__class__ 表示当前操作的对象的类是什么
13. __del__析构方法,当对象在内存中被释放时,会自动触发执行。
析构看做构建的反义词,构建指一个东西从无到有,析构指一个东西从有到无
14.上下文管理之__enter__和__exit__
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值