一:Python下载地址
Python官网:http://www.python.org/
Python文档下载地址:http;//www.python.org/doc/
通过ubuntu官方apt工具包安装:
$sudo apt-get install python
$sudo apt-get install python2.7
$sudo apt-get install python3.7
运行Python代码
用pip来安装缺少的request模块:如:pip install request
安装好Pycharm!!!
!!!!!
!!!!!
!!!!!
万物皆对象
- 类定义class,关键字self
- 类的初始化函数:init
学生的例子:
- 类的定义和使用:
# 面向过程
'''
首先定义两个学生
'''
stu1 = { 'name': 'xiaohong', 'score': 98 }
stu2 = { 'name': 'xiaobai', 'score': 81 }
# 函数
def print_score(stu): # 定义一个函数
print('%s: %s' % (stu['name'], stu['score']))
# 面向对象
# 1.设计类
# 属性和方法
class Student(object): # class后接类名称
# 方法 self指向创建的实例本身
def __init__(self,name,score): # 括号内含有要传入的参数,为形参
self.name = name
self.score = score
def print_score(self):
print('%s: %s' % (self.name,self.score))
# 实例化对象1
xiaohong = Student('xiaohong',98)
# print(id(xiaohong)) # 打印其id地址 每初始化一个对象 内存地址都不一样
# 实例化对象2
xiaobai = Student('xiaobai',81)
# print(id(xiaobai))
# 实例化对象3
xiaobai = Student('xiaobai',81)
# print(id(xiaobai))
# xiaobai.print_score() # 打印小白的分数
#xiaohong.print_score()
# print(xiaobai.name,xiaobai.score) # 第二种方法来打印小白的分数
# print(xiaohong.name,xiaohong.score)
'''
继承,封装,多态
'''
class Student(object):
# 方法 self指向创建的实例本身
def __init__(self,name,score):
self.name = name
self.score = score
def print_score(self):
print('%s: %s' % (self.name,self.score))
def get_grade(self):
if self.score >= 90:
return 'A'
elif self.score >= 60:
return 'B'
else:
return 'C'
xiaolv = Student('xiaolv',45)
#print(xiaolv.get_grade())
xiaolv.score=90
# print(xiaolv.get_grade())
'''
访问限制 私有属性
'''
class Student(object):
# 方法 self指向创建的实例本身
def __init__(self,name,score):
self.__name = name
self.__score = score # 两个下划线代表为私有 内部可修改 外部不可以
def print_score(self):
print('%s: %s' % (self.__name,self.__score))
def get_grade(self):
if self.__score >= 90:
return 'A'
elif self.__score >= 60:
return 'B'
else:
return 'C'
# 定义两种方法,来获取私有属性的值和修改私有属性
def set_score(self,score):
if 0<=score<=100:
self.__score=score
else:
raise ValueError('分数请大于0小于等于100')
def get_score(self):
return self.__score
xiaolv = Student('xiaolv',45)
print(xiaolv.set_score(98))
print(xiaolv.get_score())
print(xiaolv.get_grade())
# python没有真正的是私有,把私有改名称_Student__name
# print(xiaolv._Student__name)
'''
类属性
'''
# 实例属性 必须通过初始化或者实例化对象,通过对象去访问,
class Student(object):
def __init__(self, name):
self.name = name
s = Student('Bob')
print(s.name )
# 类属性 不需要实例化对象,直接通过类名访问
class Student(object):
name = 'Student' # 全局变量
print(Student.name)
- 继承
# 子类和父类,子类可以得到父类的所有属性
class Animal(object):
def run(self):
print('Animal is running')
class Dog(Animal):
pass
class Cat(Animal):
pass
dog = Dog()
# dog.run()
cat = Cat()
# cat.run()
class Dog(Animal):
def run(self): # 重写
# 调用父类的run方法
# super().run()
print('Dog is running')
def eat(self):
print('eat meat')
dog = Dog()
dog.run()
class Cat(Animal):
def run(self): # 重写
# 调用父类的run方法
# super().run()
print('Cat is running')
def eat(self):
print('eat fish')
'''
多态
'''
b=Animal() # b是Animal类型
c=Dog() # c是Dog类型
print(isinstance(b,Animal)) # 判断对象是何类
print(isinstance(c,Dog))
print(isinstance(c,Animal))
print(isinstance(b,Dog))
# 调用run_twice方法,需要传递Animal类的对象或者Animal的子类
def run_twice(animal):
animal.run()
animal.run()
run_twice(Dog())
run_twice(Cat())
run_twice(Animal())
# 好处就是两者不会冲突,更新不会修改太多,解耦,利于合作
# 代码运行时才确定对象的具体类型
'''
类型判断
'''
import types
def fn():
pass
print(type(fn)==types.FunctionType) # 判断类型
print(type(abs)==types.BuiltinFunctionType) # 判断是否时内置函数
# getattr(),setattr(),hasattr()
class MyObject(object):
def __init__(self):
self.x = 9
def power(self):
return self.x * self.x
obj = MyObject()
# obj 有属性'x'吗?
print(hasattr(obj,'x'))
print(obj.x) # 调用x的值
# 设置一个属性'y'
setattr(obj,'y',19)
print(hasattr(obj,'y'))
print(getattr(obj,'y')) # 动态取值 在常规中不介意使用
# dir() 获得一个对象所有属性和方法
print(obj.__dir__())
print(dir(obj))
a = [1,2]
print(len(a))
print(a.__len__())