继承:
单继承:
在子类定义的时候, 后面多写个括号,括号里面写上你继承的父类
代码:
class Phone:
IMEI = None
produce = None
def call_by_4g(self):
print("4g通话")
class Phone2023(Phone): # 继承 Phone
face_id = True
def call_by_5g(self):
print("2023年最新的5g通话")
Phone2023().call_by_4g()
Phone2023().call_by_5g()
运行结果:
多继承:
多继承,就是在类之间加上逗号 放入
要是一个类里面什么都不写会报错的,怎么办呢?加个pass关键字,就可以啦,让语法不产生错误
多继承,谁在前面谁优先, 要是属性或者是方法一样了,就继承优先级高的
class Sing:
def my_sing(self):
print("唱", end=" ")
class Jump:
def my_jump(self):
print("跳", end=" ")
class Rap:
def my_rap(self):
print("rap", end=" ")
class Kun(Sing, Jump, Rap):
def Introduce(self):
print("大家好,我叫CXK, 我会: ", end=" ")
self.my_sing()
self.my_jump()
self.my_rap()
Kun().Introduce()
运行结果:
java继承和python继承的区别:
-
语法差异:
- 在 Python 中,继承通过在类定义时在类名后面加上要继承的父类来实现,例如:
class SubClass(ParentClass):
- 在 Java 中,继承同样是通过使用关键字
extends
后跟父类名来实现,例如:class SubClass extends ParentClass { }
- 在 Python 中,继承通过在类定义时在类名后面加上要继承的父类来实现,例如:
-
多继承支持:
- Python 支持多重继承,一个子类可以继承自多个父类。
- Java 不支持多重继承,一个子类只能继承自一个父类,但可以实现多个接口。
-
方法重写:
- 在 Python 中,方法的重写是动态的,子类可以重写父类的方法,而且不需要在子类中特别声明。
- 在 Java 中,方法的重写需要使用
@Override
注解来明确标识,子类重写父类方法时需要遵循方法签名(名称和参数列表)完全相同的规则。
-
访问控制:
- 在 Python 中,没有像 Java 中的 public、protected、private 这样的访问控制修饰符,所有成员变量和方法都默认为公有的。
- 在 Java 中,可以使用 public、protected、private 等关键字来控制成员变量和方法的访问权限。
-
构造函数:
- 在 Python 中,子类的构造函数可以通过
super().__init__()
或直接调用父类名来调用父类的构造函数。 - 在 Java 中,使用
super()
关键字来调用父类的构造函数。
- 在 Python 中,子类的构造函数可以通过
复写和使用父类成员:
复习和java里面的复写是一样的,就是把父类里面的方法重写一下
在 Python 和 Java 中,super
关键字都用于调用父类的方法或构造函数,但它们的使用方式确实有一些区别。
在 Python 中:
super()
可以出现在任何位置,因为它是一个函数调用,而不是一个关键字。- 通常情况下,
super()
调用会像这样使用:super().some_method()
,它会自动查找当前类的父类,并调用父类中的对应方法。
在 Java 中:
super
关键字只能作为语句的第一条语句,用于显式调用父类的构造方法,例如:super(params)
。- 在方法内部调用父类的方法时,通常是直接使用
super
关键字,如:super.someMethod()
。
虽然它们的语法和使用方式有些区别,但核心功能都是相似的:调用父类的方法或构造函数。需要注意的是,Java 中的 super
是一个关键字,而 Python 中的 super()
是一个内置函数,这也是二者之间的一个重要区别。
代码:
class Phone:
def call(self):
print("打电话")
class NewPhone(Phone):
def call(self): # 重写父类里面的方法
super().call() # 调用父类里面的call()方法
print("用5g手机打电话")
super().call() # 这个super放在前面和后面都可以 这个和java有区别
NewPhone().call()
运行结果:
小结:
类型注解:
变量的类型注解:
基础语法:
变量: 类型
代码:
var_1: int = 10
var_2: float = 3.1415926
var_3: bool = True
var_4: str = "FindYou."
基础容器类型注解:
my_list: list = [1, 2, 3]
my_set: set = {1, 2, 3}
容器类型详细注解:
my_int_list: list[int] = [1, 2, 3]
my_tuple: tuple[str, int, bool] = ("FindYou.", 666, True)
my_dict: dict[str, int] = {"FindYou.": 666}
注释中进行类型注解:
# type: 类型
代码:
var_1 = 12 # type: int
var_2 = {"Find": 1, "You.": 1} # type: dict[str, int]
小结:
方法的类型注解:
形参注解:
代码:
def add(x: int, y: int):
return x + y
x = 1
y = 2
print(add(x, y)) # 3
返回值注解:
代码:
def add(x: int, y: int) -> int: # -> int 表示返回值是int 类型注解 不是强制性的 而是建议的和提示的
return x + y
x = 1
y = 2
print(add(x, y)) # 3
Union类型注解:
代码:
# Union表示的是混合的 也是联合的注解
from typing import Union
my_lis: list[Union[str, int]] = [1, 2, 3, "FindYou."]
def func(data: Union[int, str]) -> Union[int, str]: # 表示的是 可以传字符串 也可以传int 都可以 开心就好
return data
func("FindYou.")
多态:
代码:
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
print("汪汪汪")
class Cat(Animal):
def speak(self):
print("喵喵喵")
def make_noise(animal: Animal):
animal.speak()
dog = Dog()
cat = Cat()
make_noise(dog)
make_noise(cat)
运行结果:
抽象类(接口):
也就是方法里面是空实现的(pass), 具体的方法实现,由子类自行决定.这样称为抽象类也可以称为接口
mysql:
DDL - 库管理:
DDL - 表操作:
DML:
DML指的是数据操作语言,用来对数据库中表的数据记录进行更新.
关键字:
- 插入 insert
- 删除 delete
- 更新 update
数据插入 insert:
代码演示
create table student(
id int,
name varchar(10), # 注意字符串只支持 单引号
age int
);
-- 插入数据
insert into student (id, name, age) values(1, 'FindYou', 20), (2, 'LoveFinder', 19)
运行结果:
当然插入的数据如果是全部属性的话 可以把 (id, name, age)给省略掉 也就是下面的这个写法:
数据删除 delete:
判断的条件可以写 =, <, >, <=, >=, !=, 等等
代码:
delete from student where id = 1; -- 删除id为1的这个信息
运行的结果:
把student给删除掉
delete from student ;
数据更新 update:
update student set name = 'FindMe.' where id = 1