003、面向对象(一):类和对象

 

 

1、类和对象

  a、定义在类中的函数,称为方法 ;

  b、python里面 c = Cat() ,称为实例化; 实列化类,创建对应的对象 ;

  c、self 就是代表对象自己, id(self)   和  id(c)  的结果一样 ;

  d、实例化对象的时候,对象是谁,self就是谁 ;

  e、在定义类的时候,并不知道对象是谁。用self来表示对象 ;

  g、类里面的方法可以调用类中其他方法  ;

  h、实例是独立的,实例调用自己的方法和属性 ;

  i、类 和 实例 都可以调用类的非私有属性、方法 ;

  j、执行代码 c = Cat()时, 先执行 __new()__ 方法,执行后得到一个self对象,再执行 __init(self)__  ;

  k、def catch_mouse(self):  self 是一个参数,但是在调用时不需要传这个位置参数  ;

 

  示例代码如下:

003、面向对象(一):类和对象
class Cat():

    # 定义一个类属性(非私有属性)所有实例共有的属性,  比如:物种:动物 ;
    # 非私有属性,类和实例都可以调用 ;
    wu_zhong = '动物'

    # 对象的初始化方法 ;
    # 执行代码 c = Cat()时, 先执行 __new()__ 方法,执行后得到一个self对象,再执行 __init(self)__
    # 可以定义默认参数,category='猫科'
    def __init__(self, name, color, category='猫科'):
        self.name = name        # 用 self.name 作为对象的属性,接受name的赋值 ;
        self.color = color
        self.category = category
        print(id(self))

    # 定义在类中的函数,称为方法 ;
    # 在定义类的时候,并不知道实例是谁,用self来表示对象 ;
    def catch_mouse(self):
        print('{0}抓了一只老鼠'.format(self.name))

    # 类里面的方法可以调用类中其他方法 ;
    def eat(self):
        self.catch_mouse()
        print('{0}吃了一只老鼠'.format(self.name))

    # 类内部调用类属性
    def lei_bie(self):
        print(self.wu_zhong, self.category)


# c = Cat() ,称为实例化; 实列化类,创建实例;
# 实例化类的时候,对象是谁,self就是谁 ;
c = Cat('加菲', '灰色')
print(id(c))
# self 就是代表对象自己, id(self) 和 id(c)  的结果一样 ;
# print(id(c)) 打印的结果与 print(id(self))  一样 ;

# 类 和 实例 都可以调用类的非私有属性、方法
print('类调用类的属性: {0}'.format(Cat.wu_zhong))
print('实例调用类的属性: {0}'.format(c.wu_zhong))

c.lei_bie()
View Code

  执行结果如下:

003、面向对象(一):类和对象
3015984317440
3015984317440
类调用类的属性: 动物
实例调用类的属性: 动物
动物 猫科

Process finished with exit code 0
View Code

 

 

  本人觉得对象和实例是有区别的:类比介绍妹子相亲,最近一个月相了3个对象,有阿红、阿美、阿桃 ;

       这里 妹子是属于类 ,对象(属于妹子范围内的抽象),阿红属于实例 ;对象在类和实例范围之间  ;

003、面向对象(一):类和对象

 

上一篇:L1-003 个位数统计 (15 point(s))


下一篇:003、【byhy】 常见语法—— * 表示匹配前面的子表达式 任意次,包括0次