面向对象(object-oriented)
面向对象 面向过程
都是解决问题的方法,没有好坏对错
类
具有相同属性和行为事物的统称
定义类名
class 类名: # 类名首字母大写
属性
方法
对象
某一具体存在的事物
类就是对象的模板
对象名字 = 类() # 创建对象
在方法内通过self获取对象
class Cat:
def eat(self):
print('吃鱼')
def drink(self):
print('喝牛奶')
jf = Cat()
jf.eat()
jf.drink()
结果如下:
init 魔法方法
在创建一个对象时默认被调用,不需要手动调用
如果创建对象时传递了多个实参那么
init(self)中出了self作为第一个形参外还需要多个形参
def __init__(self, a, b, c)
注意:
1 在类内部获取属性和实例方法,通过self
2 再类外部获取属性和实例方法,通过对象名获取。
3 如果一个类有多个对象,每个对象的属性是各自保存的,都有各自独立的地址;但是实例方法是所有对象共享的,只占用一份内存空间。
str 魔法方法
直接打印对象会显示16进制的内存地址
如果写啦str方法就会打印str方法的返回值
总结
# 定义类名
class Cat:
# 属性
# init 魔法方法
def __init__(self, a, b, c):
# 属性赋值
self.name = a
self.age = b
self.weight = c
# 方法
def eat(self):
print('吃鱼')
def drink(self):
print('喝牛奶')
def info(self):
print('我的名字叫%s,我的年龄是%s,我的体重是%s' % (self.name, self.age, self.weight))
def __str__(self):
return self.name
# 创建对象
jf = Cat('加菲猫', 18, 120)
jf.eat()
jf.drink()
# 对象调用方法,会自动把对象的一个引用传给了self
jf.info()
tom = Cat('汤姆', 18, 140)
tom.info()
print(jf)
print(tom)
结果如下: