python学习(9)类与对象

 

 1 def show():                            #show() 类外的是函数
 2     print("hello")
 3 
 4 
 5 class Person(object):       # Person:类的名称(类名)首字母必须是大写    object是所有类的父类,可以说是类的祖先
 6     city="西安"              # 数据属性(也叫类属性,是类中方法外的变量),只能通过类名或者类的对象来调用(Person.city或obj1.city)
 7 
 8     #init:作用是初始化
 9     #构造方法:类初始化的时候必须要对构造方法里面的实例属性赋值
10     def __init__(self,name,age):                   #self指的是创建的实例本身
11         #实例属性的过程(给类的实例对象带默认属性,就是这个类下创建的实例对象,都带这个属性,具体属性的内容是什么,创建实例对象的时候定义):
12         self.name=name
13         self.age=age
14         print("初始化")
15 
16     def show(self):                           #show是Person类下的一个方法
17         print("my name is {0},and my age is {1}".format(self.name,self.age))
18 
19     def info(self,sex):                       #info是Person类下的一个方法
20         print("my name is {0},and my age is {1},and my sex is {2}".format(self.name,self.age,sex))
21 
22     # obj1.info(sex="nv")                          #如果不是默认属性,如sex,在调用的时候,就需要对这个实例对象单独再赋值
23     def method(self,*args,**kwargs):          #动态参数
24         print(kwargs)
25 
26     #del:作用是清理  (析构方法)
27     def __del__(self):
28         print("清理")
29 
30     @property#装饰器         #特性方法
31     def getInfo(self):
32         print("我的城市:{0},我的姓名:{1}".format(self.city,self.name))
33     @staticmethod           #静态方法
34     def getName():
35         print( "中国西安 ")
36 
37 
38 #类进行实例化(根据类创建出实例对象的过程)中会自动调用__init__方法,所以要对实例对象的属性进行赋值。实例化后实例对象就可以调用类下的方法:
39 obj1=Person(name="jrq",age=18)      #obj1:是创建Person类的一个实例对象;也是一个变量
40 # obj2=Person(name="赵四",age=70)
41 obj1.getName()
42 # print(------------给实例对象动态绑定方法------------------)
43 # def show():
44 #     print("类之外的函数")
45 
46 # obj2.show=show
47 # obj2.show()
48 
49 # print(--------------给实例对象动态绑定属性----------------------------)
50 # obj2.gender="男"
51 # print(obj2.name,obj2.age,obj2.gender)
52 # print(------------------------------------------)
53 
54 # obj1.getInfo
55 # print(Person(name="jrq",age="18").getName())
56 
57 
58 # obj1.method(address="中国西安",country="中国")
59 
60 # obj1=Person(name="jrq",age=18)      #obj1:是创建Person类的一个实例对象;也是一个变量
61 # print(obj1.name)                    #实例属性
62 # print(obj1.age)                     #实例属性
63 # obj1.show()                         #实例方法1
64 # Person.show(obj1)                   #实例方法2
65 
66 # print(Person.city)
67 # print(obj1.city)
68 
69 # Person.getName()
View Code

 

一、面向对象

所谓面向对象,其实就是说:站在上帝的视角下,世界万物一切皆对象。把拥有共同属性的归为一类,这就是class的由来。

二、类

1、类的定义:(创建类的语法)

关键字class

类的名称(类名)首字母必须是大写

  #object是所有类的父类,可以说是类的祖先

 

2、类里面有哪些东西?

类属性和方法,只有先对类进行实例化,才能调用。

2.1  类属性:

也叫数据属性,是类中方法外的变量,被该类中的所有对象所共享。

 

2.2  方法method(比较像之前学习过的函数)

格式: 

def   方法名(self,属性)         

(self表示类本身的对象。除了静态方法,别的方法都要带括号,写self属性可写可不写。)

 

初始化方法:__init__

也叫构造方法(构造函数),可以写参数(图中的name、age,也可以不写)

初始化方法下,所传的属性是每个实例对象所都有的(如图的self.name和self.age)

self后可以继续写东西。下面做赋值操作:将实例对象的值赋给实例属性(self.name称为实例属性),在后面方法中可以引用初始化方法中的实例属性(写法:self.属性名),就是直接调用这一步赋了值的实例属性。

 

实例方法:(普通方法)

普通方法和特性方法的区别就是有没有装饰器。

例1:

例2:

如果在方法中加了自己独有的属性,在调用方法时要对这个属性进行专门赋值:(添加的属性不能写成"self.属性"这个格式,如下图format中的sex)

 

静态方法:(使用@staticmethod进行修饰,不允许写self)

静态方法:理解为全局变量,但是不能等价于全局变量,静态方法的特点是使用类名来直接调用,静态方法里面不能调用实例属性(方法没有参数)。可以替代数据属性。

(当某个方法不需要用到对象中的任何资源,将这个方法改为一个静态方法, 加一个@staticmethod加上之后, 这个方法就和普通的函数没有什么区别了, 只不过写在了一个类中, 简而言之, 写在类中的函数)

 

特性方法:(使用@property进行修饰)

特性方法,只读属性,不能写,当只想调用对象的此特性时使用。也就是说添加@property 后,这个方法就变成了一个属性。意思就是我们像调用函数的属性一样调用该方法,也就是调用的时候不加括号

 

 

析构方法:__del__

 

3.函数和方法的区别:

在类之外定义的称为函数,在类之内定义的称为方法。

函数可以直接调用;方法要写在类里面,先对类进行实例化,才能调用。

方法有self,函数没有。

 

4、类的调用顺序:(方法执行顺序)

'''
调用方法执行顺序:
1、执行构造方法
2、执行真正调用的方法
3、执行析构方法
'''

 

5、调用方法的两种方法:

前提:(创建对象和赋值)

对类进行实例化之后才能调用类的方法,类进行实例化就是根据类创建出实例对象,此过程会自动调用__init__方法,所以创建时要对实例对象属性进行赋值实例化后实例对象就可以调用类下的方法。

 

方法1:       实例对象名.类方法名()

方法2:     类名.类方法名(实例对象名)

 

 (如上图obj1就是Person类的实例对象)

 

6、调用类属性的两种方法(也叫数据属性)

前提:(创建对象和赋值)

类名.类属性       (Person.city)
实例对象.类属性     (obj1.city)

 

 

 7、引用类中的方法,写法是 “self.方法()”  

引用实例属性(也就是初始化时定义的属性),写法是 “self.属性”

 

三、对象的创建

对象的创建又称为类的实例化

1、语法:

实例名=类名()

(如上图,创建Person类的实例对象obj)

 

2、创建多个类的实例对象

如上图,一个Person类可以创建n多个Person类的实例对象,每个实例对象的属性值不同 。

 

3、动态绑定属性

在创建对象之后,对某个实例对象单独绑定属性.(只适用于当前绑定的对象)

实例对象.属性="值"

 

 

4、动态绑定方法

定义在类之外的(叫函数),绑定在某个实例对象上(只适用于当前绑定的对象)

 

posted @ 2022-04-01 21:05  jia---  阅读(208)  评论(0)    收藏  举报