今天是我写博客的第一天,这也是我的第一个博客,目的是给自己的学习多一点输出,毕竟最好的学习是输出,也给自己留下复习资料吧。
首先我们知道对象 = 属性 + 方法,属性即变量,方法即函数,属性可理解为组成的部分,方法即动作,用下面的代码来解释,一个人有身高、体重等各种属性,也有跑、跳等等的动作,即他的方法,这两大部分构成了一个人,用来描述这个人。
类对象
class Man():
# 属性
weight = 126
color = yellow
legs = 2
# 方法
def walk(self):
print("我走")
def jump(self):
print("我跳")
def play(self):
print("我打")
def hide(self):
print("我躲")
特别注意:类名首字母大写(约定俗成)。
实例对象
man = Man()
很简单,调用类创建的实例对象,赋给man
这个时候,使用类里的方法,“.”即可
print(man.weight)
man.jump()
man.play()
输出
面向对象(Object-oriented)的特点
- 封装
即数据隐藏,直接调用方法即可使用(会用手机,但不知道手机的原理)
import datetime
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print(now)
比如像这里的datetime库,我们引用了然后直接用了其中的方法,并不知道其实现手段。类的封装也一样,对于实例了的对象,直接调用其中的方法、访问属性即可(’%Y-%m-%d %H:%M:%S’是时间输出的格式)。
输出
- 继承
子类共享父类的数据(好比DNA继承)
class Son(Man):
weight = 100
print(Son.weight)
son = Son()
son.jump()
son.play()
输出
继承改初始方法
class Man():
def __init__(self):
self.name = "hi"
class Son(Man):
def __init__(self):
# Man.__init__(self) 第一种方法
super().__init__() # 第二种方法,推荐
self.height = 170
son = Son()
print(son.name)
多重继承
class Son(Man, wonan):
类中类
class Man():
def __init__(self, num):
self.num = num
class Woman():
def __init__(self, num):
self.num = num
class People():
def __init__(self, num1, num2):
self.man = Man(3)
self.woman = Woman(3)
类对象和实例对象,类对象变实例对象变,实例对象变,类对象不变
class Man():
num = 0
Man.num += 5
a = Man()
b = Man()
print(a.num)
a.num += 1
print(Man.num)
输出
- 多态
即同一方法的不同实现(比如同样是学习,你选择了看博客,他选择了看视频,而看选择了看视频)
class A():
def study(self):
print("我看视频")
class B():
def study(self):
print("我看书")
class C(A):
def study(self):
print("我看博客")
a = A()
b = B()
c = C()
a.study()
b.study()
c.study()
输出
同样是学习,但实现的方法不同,C虽然继承了A,但对其中的一个方法做了修改,如上代码中对儿子的体重做了修改,其他不变。
问题
- self是什么?
self即自己,代表这个类可以用self来调用其中的属性和方法,如下代码,有两个name,哪一个是Man里的name,哪一个是传进来的参数呢?用上self以后,就知道self.name是类里的属性了。
注意:self是实例化对象的自己
class Man():
# 属性
name = ''
# 方法
def set_name(self, name):
self.name = name
man = Man()
man.set_name('李华')
print(man.name)
输出
- import的库是什么?
import的库就是人家写的.py文件 - init?
相当于构造函数,即初始化的时候自动调用的函数,
class Man():
# 属性
name = ''
# 方法
def __init__(self, name):
self.name = name
man = Man('李华')
print(man.name)
输出同上,自动调用__init__方法,并且创造出了对象,即一个初始化的功能
注意:__init__不能有任何返回值(只能返回None)
*str()能对输出函数进行重构
- 算数符号重构建(这里的int同样是一个类)
class int(int):
def __add__(self, other):
return int.__sub__(self, other)
a = int('5')
b = int('3')
print(a + b)
输出
- 反运算(即对于a + b而言,a为主动,b为被动为正运算,b为主动为反运算,反运算方法前多一个r)
class Nint(int):
def __radd__(self, other):
return int.__sub__(self, other)
a = Nint('3')
print(1 + a)
输出