python类实例化
1. python中的类为什么要实例化为一个对象才能使用
打个比方:
class 人类(object):
def __init__(self,性别,年龄,姓名等等):
self.性别=性别
self.年龄=年龄
self.姓名=姓名
def 说话(self,要说的话):
print(要说的话)
......
小明=人类(男,3岁,小明)
小明.说话('你好!')
类就好比是一类事物的抽象,是一个模板,拥有这一类事物的属性和功能。但是对于“人类”这个类来说,每个人的属性和要做的事又是不一样的,所以需要实例化,实例对象就是“人类”这个类的具体对象,后续就通过“小明”这个实例对象进行操作。😂
2. python对象和实例化的区别
对类实例化的结果就是产生一个该类的对象
实例化是action
对象是value
class MyException(Exception):
pass
class ValidationError(Exception):
def __init__(self, message, errors):
# Call the base class constructor with the parameters it needs
super(ValidationError, self).__init__(message)
# Now for your custom code...
self.errors = errors
3. 为什么python在类的实例化的时候会自动调用析构函数
在该对象不在使用的时候自动调用,怎么说呢,就是没有引用指向该对象的时候。
4. python 怎么判断一个类是否被实例化,能给出代码学习下吗,谢谢!
这个类似于单例模式吧
print '----------------------方法1--------------------------'
#方法1,实现__new__方法
#并在将一个类的实例绑定到类变量_instance上,
#如果cls._instance为None说明该类还没有实例化过,实例化该类,并返回
#如果cls._instance不为None,直接返回cls._instance
class Singleton(object):
def __new__(cls, *args, **kw):
if not hasattr(cls, '_instance'):
orig = super(Singleton, cls)
cls._instance = orig.__new__(cls, *args, **kw)
return cls._instance
class MyClass(Singleton):
a = 1
one = MyClass()
two = MyClass()
two.a = 3
print one.a
#3
#one和two完全相同,可以用id(), ==, is检测
print id(one)
#29097904
print id(two)
#29097904
print one == two
#True
print one is two
#True
5. python之面向对象
面向对象(OOP)是一种对现实世界理解和抽象的方法,对象的含义是指在现实生活中的具体事物, 一切皆对象 ,Python 是一门面向对象的语言,面向对象编程简单来说就是一种 封装代码 的方式。
Python 中类的定义使用 class 关键字定义类,语法如下所示:
举例,定义一个类 Cat
构造方法 init() 会在类实例化时自动调用。无论构造方法还是其他方法都需要将 self 作为第一个参数,它代表类的实例。
类创建好后,可以直接通过类名访问属性,格式为: 类名.属性名 ,比如我们访问 Cat 类的 color 属性,如下所示:
创建对象也称类的实例化,比如我们通过 Cat 类创建对象,如下所示:
创建好对象后,使用它访问属性和调用方法了,如下所示:
内部私有属性和方法是可以被访问和调用的。
我们来一起看个例子,如下所示:
输出结果:
Python 支持类的继承,而且支持多继承,语法格式为:
示例如下所示:
如果继承的父类方法不能满足我们的需求,这时子类可以 重写 父类方法,如下所示:
6. Python小白请假下关于类实例化的问题
class Turtle:
def init(self,x):
self.num = x
class Fish:
def init(self,x):
self.num = x
class Pool:
def init(self,x,y):
self.turtle = Turtle(x)
self.fish = Fish(y)
def print_num(self):
print ("本池塘共有%d只乌龟,有%d条鱼",(self.turtle.num,self.fish.num))
运行和报错:
pool=Pool(1,10)
Traceback (most recent call last):
File "", line 1, in
pool=Pool(1,10)
TypeError: Pool() takes no arguments
pool=Pool()
pool.print_num()
Traceback (most recent call last):
File "", line 1, in
pool.print_num()
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37-32\complexDemo.py", line 17, in print_num
print ("本池塘有%d只乌龟,有%d条鱼",(self.turtle.num,self.fish.num))
AttributeError: 'Pool' object has no attribute 'turtle'
7. python程序中怎样区分类的实例化和函数调用
如果单纯从命 名看:
1、类使是用的大驼峰,所以类是这样的:Document()
2、函数名:全部小写
8. Python的类和对象入门
本文来说说Python中的类与对象,Python这门语言是无处不对象,如果你曾浅要了解过Python,你应该听过Python是一种面向对象编程的语言,所以你经常可能会看到面向“对象”编程这类段子,而面向对象编程的语言都会有三大特征:封装、继承、多态。
我们平时接触到的很多函数、方法的操作都具有这些性质,我们只是会用,但还没有去深入了解它的本质,下面就介绍一下关于类和对象的相关知识。
封装这个概念应该并不陌生,比如我们把一些数据封装成一个列表,这就属于数据封装,我们也可以将一些代码语句封装成一个函数方便调用,这就是代码的封装,我们也可以将数据和代码封装在一起。用术语表示的话,就是可以将属性和方法进行封装,从而得到对象。
首先我们可以定义一个类,这个类中有属性和方法,但有的伙伴会比较好奇,属性和方法不是会封装成对象嘛,为什么又变成类了?举个例子,类就好比是一个毛坯房,而对象是在毛坯房的基础上改造成的精装房。
在类定义完成时就创建了一个类对象,它是对类定义创建的命名空间进行了一个包装。类对象支持两种操作:属性引用和实例化。
属性引用的语法就是一般的标准语法:obj.name。比如XiaoMing.height和XiaoMing.run就是属性引用,前者会返回一条数据,而后者会返回一个方法对象。
这里也支持对类属性进行赋值操作,比如为类中的weight属性赋予一个新值。
而类的实例化可以将类对象看作成一个无参函数的赋值给一个局部变量,如下:
ming就是由类对象实例化后创建的一个实例对象,通过实例对象也可以调用类中的属性和方法。
类在实例化过程中并不都是像上面例子一样简单的,一般类都会倾向将实例对象创建为有初始状态的,所以在类中可能会定义一个__init__的魔法方法,这个方法就可以帮助接收、传入参数。
而一个类如果定义了__init__方法,那么在类对象实例化的过程中就会自动为新创建的实例化对象调用__init__方法,请看下面这个例子。
可以看到在__init__()中传入了参数x和y,然后在print_coor中需要接收参数x和y,接下来通过实例化这个类对象,验证一下参数是否能通过__init__()传递到类的实例化操作中。
所谓继承就是一个新类在另一个类的基础上构建而成,这个新类被称作子类或者派生类,而另一个类被称作父类、基类或者超类,而子类会继承父类中已有的一些属性和方法。
比如上面这个例子,我并没有将list_定义成一个列表,但它却能调用append方法。原因是类Mylist继承于list这个基类,而list_又是Mylist的一个实例化对象,所以list_也会拥有父类list拥有的方法。当然可以通过自定义类的形式实现两个类之间的继承关系,我们定义Parent和Child两个类,Child中没有任何属性和方法,只是继承于父类Parent。
当子类中定义了与父类中同名的方法或者属性,则会自动覆盖父类对应的方法或属性,还是用上面这个例子实现一下,方便理解。
可以看到子类Child中多了一个和父类Parent同名的方法,再实例化子类并调用这个方法时,最后调用的是子类中的方法。Python中继承也允许多重继承,也就是说一个子类可以继承多个父类中的属性和方法,但是这类操作会导致代码混乱,所以大多数情况下不推荐使用,这里就不过多介绍了。
多态比较简单,比如定义两个类,这两个类没有任何关系,只是两个类中有同名的方法,而当两个类的实例对象分别调用这个方法时,不同类的实例对象调用的方法也是不同的。
上面这两个类中都有introce方法,我们可以实例化一下两个类,利用实例对象调用这个方法实现一下多态。
判断一个类是否是另一个类的子类,如果是则返回True,反之则返回False。
需要注意的有两点:
判断一个对象是否为一个类的实例对象,如果是则返回True,反之则返回False。
需要注意的有两点:
判断一个实例对象中是否包含一个属性,如果是则返回True,反之则返回False。
需要注意的是第二个参数name必须为字符串形式传入,如果不是则会返回False。
9. python定义一个Dog类,实例化两个小狗对象。类属性有名字,颜色,体重。实现以下描述
程序写给你
classdogClass():
def__init__(self,name,color,weight):
self.name=name
self.color=color
self.weight=weight
def__del__(self):
self.name=""
self.color=""
self.weight=""
defname(self):
returnself.name
defcolor(self):
returnself.color
defweight(self):
returnself.weight
a=dogClass("旺财","棕色","5斤")
b=dogClass("来福","黑色","8斤")
print("小狗名字叫",a.name,",颜色是",a.color,",体重",a.weight)
print("小狗名字叫",b.name,",颜色是",b.color,",体重",b.weight)
执行结果:
10. python 类当函数如何实例化
可以把类当做参数传入到函数里,在函数里进行实例化。如下所示。
把类A当做参数传入get_instance_from_class。在get_instance_from_class中对A进行实例化,获得其实例,并返回。
classA:
def__init__(self):
print"IamaAinstance."
defprint_myself(self):
print"printmyself."
defmain():
defget_instance_from_class(a):
returna()
a=get_instance_from_class(A)
a.print_myself()
if__name__=="__main__":
main()