dir 内置函数
变量,数据,函数都是对象
In [9]: def demo():
...: """这个是测试函数"""
...: print("123")
...:
In [10]:dir(demo) #使用内置函数dir传入标志符/数据,可以查看对象内的所有属性和方法
In [10]: demo.__doc__
Out[10]: '这个是测试函数'
__方法名__
__new__ 创建对象时,会被自动调用
__init__ 对象被初始化时,会被自动调用
__del__ 对象被从内存中销毁时,会被自动调用
__str__ 返回对象的描述信息,print函数输出使用
定义简单的类(只包含方法)
class 类名:
def 方法1(self, 参数列表):
pass
def 方法2(self, 参数列表):
pass
对象变量 = 类名()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 class Cat : 2 def eat(self): 3 print("猫爱吃鱼") 4 def drink(self): 5 print("猫爱喝水") 6 tom = Cat() 7 tom.drink() 8 tom.eat() 9 print(tom) 10 addr = id(tom) 11 print("%d" % addr) 12 print("%x" % addr) 13 14 猫爱喝水 15 猫爱吃鱼 16 <__main__.Cat object at 0x00000000012FB438> 17 19903544 18 12fb438
%d 十进制 %x 十六进制
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 class Cat: 2 def eat(self): 3 print("猫爱吃鱼") 4 def drink(self): 5 print("猫爱喝水") 6 # 创建猫对象 7 tom = Cat() 8 tom.name = "Tom" 9 tom.drink() 10 tom.eat() 11 print(tom) 12 # 再次创建猫对象 13 lazy_cat = Cat() 14 lazy_cat.name = "大懒猫" 15 lazy_cat.drink() 16 lazy_cat.eat() 17 print(lazy_cat) 18 lazy_cat2 = lazy_cat 19 print(lazy_cat2) 20 21 猫爱喝水 22 猫爱吃鱼 23 <__main__.Cat object at 0x0000000004414E48> 24 猫爱喝水 25 猫爱吃鱼 26 <__main__.Cat object at 0x00000000043E3F28>
方法中的self参数
哪一个对象调用的方法,self就是哪一个对象的引用
在类封装的方法内部,self就表示当前调用方法的对象自己
调用方法时,程序员不需要传递self参数
在方法内部
可以通过self.访问对象的属性
也可以通过self.调用其他的对象方法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 class Cat: 2 def eat(self): 3 # 哪一个对象调用的方法,self就是哪一个对象的引用 4 print("%s爱吃鱼" % self.name) 5 def drink(self): 6 print("猫爱喝水") 7 # 创建猫对象 8 tom = Cat() 9 # 可以使用.属性名,利用赋值语句就可以 10 tom.name = "Tom" 11 tom.drink() 12 tom.eat() 13 print(tom) 14 # 再次创建猫对象 15 lazy_cat = Cat() 16 lazy_cat.name = "大懒猫" 17 lazy_cat.drink() 18 lazy_cat.eat() 19 print(lazy_cat) 20 lazy_cat2 = lazy_cat 21 print(lazy_cat2) 22 23 猫爱喝水 24 Tom爱吃鱼 25 <__main__.Cat object at 0x0000000004294E10> 26 猫爱喝水 27 大懒猫爱吃鱼 28 <__main__.Cat object at 0x0000000004294EB8> 29 <__main__.Cat object at 0x0000000004294EB8>
不推荐在类的外部给对象增加属性
如果在运行时,没有找到属性,程序会报错
对象应该包括哪些属性,应该封装在类的内部
初始化方法
类名()创建对象时 1:为对象咋内存中分配空间--创建对象 2: 为对象属性设置 初始值--初始化放放init
__init__定义一个类具有哪些属性的方法
如果希望在创建对象的同时,就设置对象的属性,可以对__init__方法进行改造
1:把希望设置的属性值,定义成__init__方法的参数
2:在方法内部使用self.属性 = 形参 接收外部传递的参数
3:在创建对象时,使用类名(属性1,属性2..)调用
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class Cat: def __init__(self, new_name): #print("这是一个初始化方法") # self.属性 = 形参 self.name = new_name print("%s名字" % self.name) # 使用类名() 创建对象时,自动调用__init__ tom = Cat("Tom") lazy_cat = Cat("大懒猫")
内置方法和属性
当一个对象从内存中销毁前,会自动调用__del__方法
使用print输出对象变量,默认情况下回输出这个变量引用的对象 是由哪一个类创建的对象,以及在内存中的地址(十六进制)
希望看到自定义的信息,可以使用__str__方法 返回一个字符串
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class Cat: def __init__(self, new_name): self.name = new_name print("%s来了" % self.name) def __del__(self): print("%s 我去了" % self.name) # tom 是一个全局变量 tom = Cat("Tom") print(tom.name) # del 关键字可以删除一个对象,调用__del__方法 del tom print("-" * 50)
Tom来了
Tom
Tom 我去了
--------------------------------------------------
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class Cat: def __init__(self, new_name): self.name = new_name print("%s来了" % self.name) def __del__(self): print("%s 我去了" % self.name) def __str__(self): return "我是小猫[%s]" % self.name # tom 是一个全局变量 tom = Cat("Tom") print(tom)
Tom来了
我是小猫[Tom]
Tom 我去了