坚持是一种品质 2019-11-06
主要观察创建类的方法,然后用类创建一个对象,然后在创建的对象身上使用类中的方法:
class person(): def Output_name(self): print(‘Tom‘) per=person() per.Output_name() #Tom
在上面的例子中,类中函数的参数有一个self,其实这个东西相当于c++中的this指针,self相当于创建的对象,从下面的例子中可以清楚的理解:
class person(): def Output_name(self): print(‘Tom‘) print(self) per=person() print(per) per.Output_name() #Tom
执行结果如下:
1 <__main__.person object at 0x000001F03FBA65C0> 2 Tom 3 <__main__.person object at 0x000001F03FBA65C0>
和c++有很大的不同,python可以直接在类外对对象进行属性的设定:
class person(): def Output_name(self): print(‘Tom‘) per=person() per.name=‘Tom‘ per.age=10
设定好了以后当然还可以直接在类外对对象的属性进行访问:
class person(): def Output_name(self): print(‘Tom‘) per=person() per.name=‘Tom‘ per.age=10 print(f‘这个人的名字叫做:{per.name}‘) #这个人的名字叫做:Tom
如果在类内设定了访问属性的方法,那么就可以直接可以调用该方法实现对象属性的访问:
class person(): def Output_name(self): print(self.name) per=person() per.name=‘Tom‘ per.Output_name() #Tom
在python类中,可以使用具有特殊形式的魔法方法:_xx_()
(1)首先来看第一种魔法方法__init__(self),这种方法其实可以理解为c++中的构造函数,完成了属性的初始化,创建对象的时候会直接调用这个方法:
其实下面例子的方法可以理解为默认构造或者无参构造
class person(): def __init__(self): self.name=‘Tom‘ self.age=18 def Output(self): print(self.name) print(self.age) per=person() per.Output() #Tom , 18
当然,类似于c++,还应该有有参构造函数__init__(self,参数,参数...):
class person(): def __init__(self,name,age): self.name=name self.age=age def Output(self): print(self.name) print(self.age) per=person(‘Tom‘,18) per.Output() #Tom , 18
(2)再介绍另外一种魔法方法:_str_(self),前面我们在定义了一个对象以后,直接用print函数输出这个对象,那么得到的就是这个对象的地址,然而我们实际项目中,我们往往不需要这样的地址,而是更希望来一些说明性的文字,来介绍这个对象或者类,这个方法就是玩成这样一项工作:
class person(): def __init__(self,name,age): self.name=name self.age=age def __str__(self): return "这是对一个人的介绍" per=person(‘Tom‘,18) print(per) #这是对一个人的介绍
(3)当然还有一种魔法方法:_del_(self),这个方法其实从字面也很好理解,就是析构函数,当我们定义的一个对象并且进行完所有的相关操作以后,内存需要被收回,这个时候就会自动调用该方法:
class person(): def __init__(self,name,age): self.name=name self.age=age def __del__(self): print(‘内存被收回‘) per=person(‘Tom‘,18) #执行完所有代码,会有这样的结果:内存被收回