2021-06-06 Python基础知识——面向对象(2)

一、类和对象的基本了解:

1.类是具有一组相同或者相似特征(属性)和行为(方法)的一系列对象的集合。

行为——方法

特征——属性

2.对象是实实在在的东西,是类的一个实例化。

例1:小明开着他家的宝马去逛街

小明————抽象出的类是 人类
宝马————抽象出的类是 汽车

例2:坦克大战中的类

坦克: 
      类名————坦克
      属性————血量、类型
      方法————发射炮弹

墙;
      类名————墙
      属性————血量类型
      方法————阻挡

二、定义类和对象

#定义类:
#类结构:类由3个部分组成,类的名称——类名,类的属性——一组数据,类的方法——进行操作的方法

#基本格式
class 类名object):   #object可以省略不写
    属性
    方法


#例子:
class Person(object):
    name = 'xiaopeng'   #特征(属性)——姓名
    age = 18            #特征(属性)——年龄
    def eat(self):      #行为(方法)——吃饭
        print("大口地吃饭")
        pass
    def run(self):      #行为(方法)——跑步
        print("飞快地跑")
        pass
#创建对象

#格式  对象名 = 类名()

#示例
class Person(object):
    name = 'xiaopeng'        #特征(属性)——姓名
    age = 18                 #特征(属性)——年龄
    def eat(self):           #行为(方法)——吃饭
        print("大口地吃饭")
        pass
    def run(self):           #行为(方法)——跑步
        print("飞快地跑")
        pass
    def singing(self):
        print("啦啦啦啦啦啦") #行为(方法)——唱歌      
        pass
d1 = Person()                #创建对象
d1.eat()                     #调用eat()方法
d1.run()                     #调用run()方法
print(d1.singing())            #访问类属性

三、实例方法和属性

#实例方法
·在类的内部,使用 def 来定义一个实例方法,值得注意的是它与一般函数定义不同,类方法必须包含参数self,且作为第一个参数(self名字可以变,但位置必须要存在)

class Person(object):
    name = 'xiaopeng'        #特征(属性)——姓名
    age = 18                 #特征(属性)——年龄
    def eat(self):           #行为(方法)——吃饭
        print("大口地吃饭")
        pass
    def run(self):           #行为(方法)——跑步
        print("飞快地跑")
        pass
    def singing(self):
        print("啦啦啦啦啦啦") #行为(方法)——唱歌      
        pass
d1 = Person()                #创建对象
d1.eat()                     #调用eat()方法
d1.run()                     #调用run()方法
d2 = Person()
d2.eat()                     #用eat()方法
d2.run()                     #调用run()方法

结果:
大口地吃饭
飞快地跑
大口地吃饭
飞快地跑                      #结果说明在类里面定义的方法可以被不同对象调用

 

#属性

·类里面定义的变量,定义在类里面
·如果在类里面,但是是在方法的外面,则为类属性;
·同理,在方法里面使用self引用的属性称之为实例属性  self.变量名
·实例对象名.变量名 = 'xxxx'  此方法为添加实例属性

四、__init__ 方法

  • 能够在创建对象时就顺便将对象的属性设置。
  • 一个初始化方法,用来定义实例属性和初始化数据的。
class Animal(object):            #创建Animal类
    pass                         #无类属性
    def eat(self):               #定义方法(行为)———吃
        print("吃饭")
dog=Animal()                     #创建对象
dog.color='red'                  #添加实例属性
dog.name='小小'                  #添加实例属性
print(dog.color,dog.name)

cat=Animal()                     #创建对象    
cat.color='yellow'               #添加实例属性
cat.name='大大'                  #添加实例属性
print(cat.color,cat.name)
·
·
·
·

如果有很多个对象,每次都要添加属性的话就很麻烦,那么就可以用 __init__(self) 方法 

class Animal(object):            #创建Animal类
    pass                         #无类属性
    def eat(self):               #定义方法(行为)———吃
        print("吃饭")
    def __init__(self):
        self.name = 'xiaoming'   #定义实例属性
        self.age = 'age'         #定义实例属性
        self.color = 'red'       #定义实例属性
d1=Animal()
d2=Animal()
d1.name='小小'                   #修改实例属性
d2.name='大大'                   #修改实例属性
print(d1.name)
print(d2.name)


这样子看起来好像没有什么区别,但实际上我们通过__init__定义了一个实例属性,它与之前的类属性不是同一回事。类属性修改通过 类名.类属性='xxx',更改后会影响创建之后的所有实例。 
而实例属性通过 实例名.实例属性.='xxxxx',更改后无法修改多个对象的实例属性。

 

  • __init__传参问题  !!!!!目前最有用,最常用方法
    class Animal(object):            #创建Animal类
        pass                         #无类属性
    
        def __init__(self,name,age,color):
            self.name = name
            self.age = age
            self.color = color
    
    d1=Animal('小小',18,'yellow')    #创建并实例化对象
    print(d1.name,d1.color)
    
    d2=Animal('大大',17,'blue')      #创建并实例化对象
    print(d2.name,d2.age,d2.color)
    
    结果:
    小小 yellow
    大大 17 blue

     

#同理我们可以完善eat函数

class Animal(object):            #创建Animal类
    pass                         #无类属性
    def __init__(self,name,age,color):
        self.name = name
        self.age = age
        self.color = color
    def eat(self,food):               #定义方法(行为)———吃
        print(self.name+"喜欢吃"+food)   
        
d1=Animal('小小',18,'yellow')
d1.eat('rice')                        #

结果:
小小喜欢吃rice

 

五、理解self

  • self和我们创建的对象指向同一个地址,可以认为self就是对象的引用。
#示例
class Person(object):               #创建Person类
    def eat(self):                  #定义一个eat方法(行为)
        print('self=%s',id(self))   #调用函数id()输出self参数的地址
        pass
    pass
d1=Person()
print('d1=%s',id(d1))               ##调用函数id()输出对象d1的地址
d1.eat()
  • self的传参问题,在上面我们已经可以知道self可理解为对象本身,某个对象调用其方法时,python的解释器会把这个对象作为第一个参数传给self,所以作为开发者我们只需传递后面的参数。
#示例
class Person(object):               #创建Person类
    def eat(self,name,food):        #定义一个eat方法(行为)
        print("%s 喜欢吃%s"%(name,food))
        pass
    pass
d1=Person()
d1.eat('小为','米饭')
  • self的名字可以更改,只是我们约定俗成使用self
#示例
class Person(object):               #创建Person类
    def eat(good,name,food):        #定义一个eat方法(行为)
        print("%s 喜欢吃%s"%(name,food))
        pass
    pass
d1=Person()
d1.eat('小为','米饭')
#示例
class Person(object):               #创建Person类
    def __init__(self,pro):
        self.pro = pro
    def eat(a,name,food):           #定义一个eat方法(行为)
        print("%s 喜欢吃%s , 他的专业是 %s "%(name,food,a.pro))   #这里的a.pro==d1.pro
        pass
    pass
d1=Person('数学')
d1.eat('小为','米饭')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值