Python学习笔记--类内部函数以及创建对象


面向对象基础语法


1--dir内置函数

。--在Python中对象几乎是无所不在的,之前学习的变量、数据、函数都是对象
。--在Python中可以使用以下两个方法验证:
--在标识符/数据后输入一个. ,然后按下tab键,ipyhton会提示该对象能够调用的方法列表
--使用内置函数dir传入标识符/数据,可以查看对象内的所有属性与方法
提示:_方法_格式的方法是Python提供的内置方法/属性,以下为一些常用的内置方法/属性

方法名 类型 作用

__new__ 方法 创建对象时,会被 自动调用
__init__ 方法 对象初始化时,会 自动 被调用
__del__ 方法 对象被从内存中销毁前,会 自动 被调用
__str__ 方法 返回对象的描述信息,print函数输出使用

提示:利用好dir()函数,自学习时很多内容就不需要死记硬背了


2--定义简单的类(只包含方法)

。--面向对象是更大的封装,在一个类中封装多个方法,这样通过这个类创建出来的对象,就可以直接调用这些方法了

。--定义只包含方法的类
--在Python中要定义一个值包含方法的类

语法格式:
class 类名:

def 方法1(self,参数列表):

pass

def 方法2(self,参数列表):

pass

--方法的定义格式和之前学习过的函数几乎一样
--区别在于第一个参数必须是self,self下面介绍

**注意:类名的命名规则要符合大驼峰命名法



2.1--创建对象

。--当一个类定义完成之后,要使用这个类来创建对象

语法格式:
对象变量=类名()

练习:
#创建类
class Cat:

def eat(self):

print("吃东西")

def drink(self):

print("喝水")


#创建对象
tom=Cat()

#调用方法
tom.eat()


。--引用概念的强调  (在面向对象开发中,引用的概念是同样适用)
--在Python中使用类创建对象之后,tom变量中仍然记录的是对象内存中的地址
--也就是tom变量引用了新建的猫对象
--使用print输出对象变量,默认情况下,是能够输入这个变量引用的对象是由哪一个类创建的对象,以及在内存中的地址(十六进制表示)

提示:
--在计算机中,通常使用十六进制表示内存地址
--十进制和十六进制都是用来表达数字的,只是表达的方式不一样
--十进制和十六进制的数字之间可以来回转换

--%d可以以十进制输出数字
--%x可以以十六进制输出数字

例:print(tom)(接上)
结果:<_main_.Cat object at 0x7fdbd8326b00>


3--类中的方法中的self参数

。--在Python中,要给对象设置属性,非常的容易,但是不推荐使用
--因为:对象属性的封装应该封装在类的内部
。--只需要在 类的外部的代码中直接通过 . 设置一个属性即可


**注意:这种方式虽然简单,但是不推荐

例:
(接上)
tom.name="Tom"

其中:其他用相同的类进行创建的对象,若没有进行属性设置,是没有该属性的


3.1--利用self在类封装的方法中输出对象的属性

。--由哪一个对对象调用的方法,方法内的self就是哪一个对象的引用
。--在类封装的方法内部,self就表示当前调用方法的对象自己
。--在方法内部:
--可以通过self,访问对象的属性
--也可以通过self,调用其他的对象方法

例:
class Cat:

def eat(self):

#self--哪一个对象调用该函数(eat),self就是哪一个对象的引用,就可以直接调用对应对象的属性
print("%s 吃东西" %self.name)

def drink(self):

print("%s 喝水" %self.name)


#创建对象
tom=Cat()

#设置属性
tom.name="Tom"

#调用方法
tom.eat()

。--在类的外部,通过变量名,访问对象的属性和方法
。--在类封装的方法中,通过self访问对象的属性和方法


4--类中的初始化方法

。--在类的外部给对象增加属性--会存在问题
--
tom=Cat()
tom.drink()
tom.eat()
tom.name="Tom"
print(tom)

程序报错:‘Cat’对象没有‘name’属性

提示:。--在日常开发中,不推荐在类的外部给对象增加属性
--如果在运行时,没有找到属性,程序会报错
。--对象应该包含那些属性,应该封装在类的内部

。--初始化方法
--当使用类名()创建对象时,会自动执行以下操作:

-为对象在内存中分配空间--创建对象
-为对象的属性设置初始值--初始化方法(init)

--这个初始化方法就是__init__方法,__init__对象的内置方法

--在Cat中增加__init__方法,验证该方法在创建对象时会被自动调用

class Cat:
"""这是一个猫类"""

def __init__(self):
print("初始化方法")

。--在初始化方法内部定义属性

--在__init__方法内部使用 self.属性的初始值 就可以定义属性
--定义属性之后,再使用Cat类创建对象,都会拥有该属性


5--改造类中的初始化方法--初始化的同时设置初始值

。--在开发中,如果希望在创建对象的同时,就设置对象的属性,可以对__init__方法进行改造

。--步骤

--把希望设置的属性值,定义成__init__方法的参数
--把方法内部使用 self.属性=形参 接收外部传递的参数
--在创建对象时,使用类名(属性1,属性2...)调用

class Cat:

def __init__(self,name):

print("初始化方法 %s" % name)
self.name=name

...

tom=Cat("Tom")

6--类中的内置方法和属性

。--__del__方法

--当使用 类名() 创建对象时,为对象分配空间后,自动调用__init__方法
--当一个对象被从内存中销毁前,会自动调用该方法

。--应用场景

--__init__改造初始化方法,可以让创建对象更加灵活
--__del__如果希望在对象被销毁前,再做一些事情,可以考虑一下__del__方法

。--生命周期

--一个对象调用 类名() 创建,生命周期开始
--一个对象的__del__方法一旦被调用,生命周期结束
--在对象的生命周期内,可以访问对象属性,或者让对象调用方法

。--__str__方法

--在Python中,使用 print 输出对象变量,默认情况下,会输出这个变量引用的对象 是由哪一个类创建的对象,以及在内存中的地址(用十六进制表示)
--如果在开发中,希望使用 print 输出对象变量是,能够打印自定义的内容,就可以利用 __str__ 这个内置方法了

**注意:__str__方法必须返回一个字符串

class Cat:

def __init__(self,name):

self.name=name

def __del__(self):

print("%s 删除" %self.name)

def __str__(self):

return "我是猫:%s" %self.name

tom=Cat("Tom")
print(tom)

结果:我是猫:Tom
      Tom删除





猜你喜欢

转载自blog.csdn.net/qq_38930129/article/details/80622642