dir函数
使用内置函数dir传入标识符/数据,可以查看对象内的所有属性和方法
def demo():
pass
demo()
print(dir(demo))
利用好dir函数,可以不需要背许多内容
类
定义类
与C++相同
class 类名:
def 方法(self,参数列表)
方法的定义和之前的 函数 几乎一样
区别在于第一个参数必须是self
哪个对象调用的方法,self就是哪一个对象的引用
class Cat:
def eat(self):
print("%s 小猫吃鱼"% self.name)
def drink(self):
print("小猫喝水")
a = Cat()
a.name = "Tom"
a.drink()
a.eat()
b = Cat()
b.name = "Jery"
b.eat()
创建对象
对象变量 = 类名()
提示:在 对象的方法内部,可以直接访问对象的属性
私有属性和私有方法
C++里的private
定义方式:
在定义属性或方法前,在 属性名或方法名前 增加 两个下划线 ,定义的就是 私有属性或私有方法
一般不使用私有方法
class Men:
def __init__(self, name):
self.__name = name
self.age = 20
def demo1(self):
print(self.__name)
print(self.age)
self.__demo2() #可以在类内调用私有方法
def __demo2(self):
print("私有方法")
zs = Men("张三")
zs.demo1() #可以在类内调用私有属性
zs.__demo2() #不能在外面调用私有方法,所以会报错
print(zs.__name) #不能在外面调用私有属性,所以会报错
初始化方法
相当于C++的构造函数
方法:
__init__ 内置方法
举例:
def __init__(self):
self.name = "张三"
.....
#这种是直接创建对象
def __init__(self,name, ......):
self.name = name
.....
#这种是 a = 类名("张三")
特别的调用
class Gun:
def __init__(self,model):
self.model = model
self.bullet = 0
def shoot(self):
print("射击")
class Soldier:
def __init__(self,name):
self.name = name
self.gun = None
ak47 = Gun("AK47")
print(ak47)
xsd = Soldier("许三多")
xsd.gun = ak47 #这里把枪类对象赋值给士兵类的一个变量
xsd.gun.shoot() #士兵类的变量就可以调用枪类的成员函数
print(xsd.gun)
__del__方法(析构函数)
当使用类名() 创建对象时,为对象 分配空间后,自动调用 __init__
方法
当一个 对象在内存中被销毁 前,会 自动 调用 __del__
方法
class Cat:
def __del__(self):
a = Cat()
del a #调用del方法 销毁对象
__str__方法
使用print 输出对象变量,默认情况下会输出这个变量 引用对象是由哪一类创建的对象,和在内存中的地址(十六进制)
如果不想显示这些,可以利用 __str__
方法
注意:str方法必须返回一个字符串
class Man:
name = "1"
def __init__(self,name):
self.name = name
print("%s" % self.name)
def __str__(self): #自动调用
return "Man[%s]" % self.name #必须要返回一个字符串
a = Man("张三")
print(a)