day17 - 面向对象基础
1,编程思想
编程思想:面向过程编程(穷人思想),函数式编程(小资),面向对象编程(富豪)
from math import factorial
print ( factorial( 10 ) )
class Math :
@staticmethod
def factoroal ( num: int ) :
s = 1
for x in range ( 1 , num+ 1 ) :
s *= x
return s
@staticmethod
def cube ( num) :
return num ** 3
print ( Math. factoroal( 10 ) )
2,类和对象
1) 什么是类,什么是对象
"""
什么类:拥有相同功能相同属性的对象的集合 (抽象的概念)
什么对象:对象是类的实例 (具体的事物)
从生活的角度理解类和对象:
人是类,冬风就是对象,东风就是另外一个对象
杯子是类,我桌子上的这个杯子就是对象
"""
2)创建类和对象
"""
1) 创建类 - 就是用代码描述清楚这个类是拥有哪些相同功能(函数)和哪些相同属性的对象的集合
语法:
class 类名:
类的说明文档
类的内容
说明:
class - 关键字;固定写法
类名 - 程序员自己命名;
要求:标识符,不是关键字
规范:见名知义;驼峰式命名,并且第一个字母大写;你使用系统的函数名,类名,模块名
: - 固定写法
类的说明文档 - 多行注释
类的内容 - 包含属性和方法
属性:类属性(类的字段),对象属性
方法:对象 方法,类方法,静态方法
注:方法是定义在类中的函数
2)创建对象
语法:
类名()
"""
class Person :
"""
类的说明文档
"""
def eat ( self) :
print ( '吃东西!' )
p1 = Person( )
print ( p1)
p2 = Person( )
print ( p2)
4,对象方法
什么是对象方法
"""
1)怎么定义
直接定义在类中的函数就是对象方法
2)怎么调用:通过'对象.'的形式来调用
3)特点
有默认参数self,这个参数在调用的时候不用传参,系统会自动将当前对象传给self(谁调用就指向谁)
"""
class Student :
def study ( self) :
print ( f'self: { self} ' )
print ( '学习!' )
def eat ( self, food) :
print ( f'吃 { food} ' )
stu1 = Student( )
stu2 = Student( )
print ( f'stu1: { stu1} ' )
print ( f'stu2: { stu2} ' )
stu1. study( )
stu1. eat( '米饭' )
4,init方法
1),__init__方法 - 初始化方法
"""
1)构造方法:函数名和类名相同,用来创建对象的函数就是构造函数(构造方法)
python的构造函数不需要程序员自己写,创建类的时候系统会自动创建这个类的构造函数
2)初始化方法:
a,当通过类创建对象的时候系统会自动调用__init__方法
b,在调用构造函数创建对象的时候,需不需要参数需要几个参数看对应的__init__除了self以外有没有额外的参数,有有几个额外的参数
c,程序员在类中添加__init__方法的时候只需要保证方法名是__init__有默认参数self就可以
形参和函数体可以根据情况随便添加
补充:前后都有两个下划线的方法又叫魔法方法,这类方法不需要程序员去调用,在特定情况下会被自动调用
"""
class Dog :
def __init__ ( self, x= 9 ) :
print ( '初始化方法' )
p1 = Dog( )
p2 = Dog( x= 20 )
p3 = Dog( 10 )
5,属性
属性 - 定义在类中的变量
"""
1)类属性
a,怎么定义:直接定义类中的变量
b,怎么使用:通过'类.'的方式来使用
c,什么时候使用:属性值不会因为对象不同而不一样
2)对象属性
a,怎么定义:
以'self.'的形式定义在__init__方法中
b,怎么使用:以'对象.'的方式来使用
c,什么时候使用:
属性值会因为对象不同而不一样的时候就使用对象属性
"""
class Circle :
a = 10
pi = 3 , 1415926
def __init__ ( self) :
self. radius = 1
print ( Circle. a)
c1 = Circle( )
print ( c1. radius)
class Person :
def __init__ ( self, name, gender= '男' ) :
self. name = name
self. gender = gender
self. age = 0
p1 = Person( '冬风' )
p2 = Person( '东风' )
p3 = Person( '东风' , '女' )
print ( p1. name, p1. gender)
print ( p2. name, p2. gender)
print ( p3. name, p3. gender)
class Circle :
pi = 3.1415926
def __init__ ( self, radius) :
self. radius = radius
def area ( self) :
return Circle. pi * self. radius ** 2
c1 = Circle( 2 )
c2 = Circle( 4 )
print ( c1. area( ) )
print ( c2. area( ) )
6,方法
方法 - 定义在类中的函数
"""
1)对象方法
a,怎么定义:直接定义在类中
b,怎么调用:对象.
c,特点:有个默认参数self,self不用传参,谁调用self就指向谁
d,什么时候用:如果实现函数的功能需要用到对象属性,就将定义成对象方法
2)类方法
a,怎么定义:定义函数前加装饰器@classmethod
b,怎么调用:类.
c,特点:有个默认参数cls,调用的时候不用传参,系统自动将当前类传给cls
d,什么时候用:在不需要对象属性的前提下,需要类
3)静态方法
a,怎么定义:定义函数前加装饰器 @staticmethod
b,怎么调用:类.
c,特点:没有默认参数
d,什么时候用:在不需要对象属性的前提下,也不需要类
"""
class A :
def func1 ( self) :
print ( '对象方法' )
@classmethod
def func2 ( cls) :
print ( f'cls: { cls} ' )
print ( '类方法' )
b = cls( )
print ( f'b: { b} ' )
@staticmethod
def func3 ( ) :
print ( '静态方法' )
a = A( )
a. func1( )
print ( f'A: { A} ' )
A. func2( )
A. func3( )
class Math :
@staticmethod
def sum ( a, b) :
print ( a+ b)
return a+ b
print ( Math. sum ( 1 , 2 ) )