Python中的类的定义和对象的创建

面向对象中两个重要的概念:

1.类   :对一类事物的描述,是抽象的、概念上的定义。比如做石膏像的模型
2.对象:实际存在的该类事物的每个个体,因而也称实例(instance)。比如石膏像
二者的关系:对象是由类派生的、创建的。一个类可以创建无穷多个对象,每个对象都属于类。

 1.创建类和创建类对象


 
 
  1. 1.创建类,类主要由类名,属性,方法组成,当然创建一个类时,属性和方法可以选择的。
  2. class Person:
  3. def cry(self): #类方法:跟函数的定义类似,但是self参数自带的,这也是类的方法和普通方法的区别。
  4. print( "I can cry")
  5. def speak(self):
  6. print( "I can speak:%s"%(self.word))
  7. ---------创建对象-----------------------------------------------------------------------
  8. tom =Person() #创建对象,直接类名(),不用像java中还要new,所以python更加简洁
  9. tom.cry() #调用对象的方法
  10. tom.word= "hahah"
  11. tom.speak()
  12. tom.age = 18 #给对象添加属性 ,属性不用在类定义时声明,但这种方法给对象赋值麻烦,每个对象都要赋值。
  13. tom.age = 19 #上面已经给tom添加过age属性,再次属于调用,重新赋值。
  14. ----------执行结果-------------------------------------------------------------------------
  15. '''
  16. I can cry
  17. I can speak:hahah
  18. '''
  19. 2.给类初始化属性,在对象创建时就给对象设定了一些默认值。这样不用给每个对象都添加属性了,比如每个Person都是china,sex都是male.
  20. _init_(self)该类的方法有点类似java中类的构造器,可以给类的对象赋初始值。
  21. ------------------------------------------------------------------------------------------
  22. class Person1:
  23. def __init__(self): #_init_(self),主要给类初始化一些属性,对象创建时自动调用该方法执行
  24. self.country = "china"
  25. self.sex = "male"
  26. def speak(self):
  27. print( "I am from %s ,wuwuwuwuu"%self.country)
  28. -------------创建对象----------------------------------------------------------------------
  29. jack = Person1()
  30. jack.speak()
  31. print(jack.country,jack.sex)
  32. tom=Person1()
  33. tom.speak()
  34. print(tom.country,tom.sex)
  35. --------------执行结果如下:----------------------------------------------------------------
  36. '''
  37. I am from china ,wuwuwuwuu
  38. china male
  39. I am from china ,wuwuwuwuu
  40. china male
  41. '''
  42. 3.属性虽然初始化了,但是固定死的,而实际每个对象的属性就不同。
  43. 所以通过初始化时调用参数的形式,给每个对象赋不同的属性值
  44. class Person2:
  45. def __init__(self,name,age):
  46. self.age =age #这种用法类似java中的this.age=age.self意思可以理解为当前对象
  47. self.name = name #表示将当前对象传进来的参数name的值赋给当前对象的属性name
  48. self.country = "china" #还是可以给类的每个对象都赋一个默认值。
  49. def speak(self):
  50. print( "name=%s,age=%d"%(self.name,self.age))
  51. -----------创建对象------------------------------------------------------------------------
  52. p1 = Person2( "allen", 19)
  53. p2 = Person2( "sherry", 22)
  54. p3 = p2 #让p3=p2.对象的赋值
  55. p1.speak()
  56. p2.speak()
  57. print( "p1:",p1) #直接打印对象 ,打印的是对象在内存中地址。
  58. print( "p2:",p2)
  59. print( "p3:",p3) #发现p3的地址跟p2的地址一样。
  60. '''执行结果如下:
  61. name=allen,age=19
  62. name=sherry,age=22
  63. p1: <__main__.Person2 object at 0x000001CBA3508BE0>
  64. p2: <__main__.Person2 object at 0x000001CBA3508CF8>
  65. p3: <__main__.Person2 object at 0x000001CBA3508CF8>
  66. '''

总结:

  • __init__()方法,在创建一个对象时默认被调用,类似Java中构造器。不需要手动调用
  • __init__(self)中,默认有1个参数名字为self,必须写。如果在创建对象时传递了2个实参,那么__init__(self)中出了self作为第一个形参外还需要2个形参,例如__init__(self,age,name).第一个self不需要手动传参 
  • __init__(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递进去
  • python中一个类中只能有一个__init__方法,不支持该方法的重载(类似java中构造器的重载)
  • 每一个对象 都有自己 独立的内存空间保存各自不同的属性
  • 多个对象的方法在内存中只有一份,在调用方法时,需要把对象的引用 传递到方法内部

2.新式类与旧式(经典)类

object 是 Python 为所有对象提供的 基类,提供有一些内置的属性和方法,可以使用 dir 函数查看

  • 新式类:以 object 为基类的类,推荐使用
  • 经典类:不以 object 为基类的类,不推荐使用

  • 在 Python 3.x 中定义类时,如果没有指定父类,会 默认使用 object 作为该类的 基类 —— Python 3.x 中定义的类都是 新式类

  • 在 Python 2.x 中定义类时,如果没有指定父类,则不会以 object 作为 基类

新式类 和 经典类 在多继承时 —— 会影响到方法的搜索顺序

为了保证编写的代码能够同时在 Python 2.x 和 Python 3.x 运行!
今后在定义类时,如果没有父类,建议统一继承自 object


 
 
  1. class 类名(object):
  2. pass
  3. #尽量不要用下面这种老是写法,虽然不会报错,但是不推荐
  4. class 类名:
  5. pass

统一声明:关于原创博客内容,可能会有部分内容参考自互联网,如有原创链接会声明引用;如找不到原创链接,在此声明如有侵权请联系删除哈。关于转载博客,如有原创链接会声明;如找不到原创链接,在此声明如有侵权请联系删除哈。 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值