面向对象1

是一个概念就是类

具体的东西是对象

狗 类

李四家的狗 对象

 

类的名称:类名

类的属性:一组数据

类的方法:允许对进行操作的方法(行为)

 

定义一个坦克类

类名:tank
属性:重量,材料,速度
方法:开炮,移动,转弯


class Cat:
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def eat(self):
        print('猫在吃鱼')

    def drink(self):

        print('猫在喝水')
    def introduce(self):
        print('%s的年龄是:%d'%(self.name,self.age))

tom=Cat('汤姆',40)
tom.introduce()

lanmao=Cat('蓝猫',100)
lanmao.introduce()

__init__会在创建对象时自动调用,然后返回创建对象的引用给对象
class Cat:
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def eat(self):
        print('猫在吃鱼')

    def drink(self):
        print('猫在喝水')
    def __str__(self):
        return '%s的年龄是:%d'%(self.name,self.age)
    def introduce(self):
        print('%s的年龄是:%d'%(self.name,self.age))

tom=Cat('汤姆',40)
print(tom)

lanmao=Cat('蓝猫',100)
print(lanmao)

__str__打印的是对象的描述信息,必须有return,也就是说打印对象时会自动调用__str__


对象之间的交互

 

 

定义属性时最好用方法,避免直接设置属性时出错

class Dog:
    def set_age(self,new_age):
        if new_age>=0 and new_age<=100:
            self.age=new_age
        else:
            self.age=0

    def get_age(self):
        return self.age
dog=Dog()
dog.set_age(100)
age=dog.get_age()
print(age)

 

私有方法
class Dog:
    #私有方法
    def __send_msg(self):
        print('正在发送短信')
    #公有方法
    def send_msg(self,money):
        if money>10000:
            self.__send_msg()#类的内部可以直接调私有方法
        else:
            print('余额不足,请充值')

dog=Dog()
dog.send_msg(1000)
# 为了不让别人看到这个方法,因为这个方法比较重要

 

 

__del__方法,当一个对象的引用计数为0时,自动执行__del__方法

class Dog:
    def __del__(self):
        print('over')

dog1=Dog()
dog2=dog1

del dog1
del dog2
print('======')

 

 

 

测量一个对象的引用计数的方式,用sys中的getrefcount方法接收一个对象,打印出来的结果比实际的引用要多一个,因为它自己也要接收一个

import sys
class T:
    pass
t=T()
print(sys.getrefcount(t))
tt=t
print(sys.getrefcount(t))

#2
#3

 

posted @ 2018-12-09 22:37  Operater  阅读(200)  评论(0)    收藏  举报