Bài 4: Module và Thư viện trong Python
· One min read
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
print(f"Xin chào, tôi là {self.name}")
p = Person("Nam", 25)
p.greet()
class Student(Person):
def __init__(self, name, age, student_id):
super().__init__(name, age)
self.student_id = student_id
Animal
và lớp con Dog
kế thừa từ Animal
.Car
với các thuộc tính brand
, model
, year
và một phương thức in thông tin xe.requests
pip install requests
import requests
response = requests.get("https://api.github.com")
print(response.json())
pip install scikit-learn
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
data = load_iris()
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2)
model = RandomForestClassifier()
model.fit(X_train, y_train)
print("Độ chính xác:", model.score(X_test, y_test))
sklearn
để huấn luyện mô hình hồi quy tuyến tính.// Model
class User {
final String name;
final String email;
User(this.name, this.email);
}
// Controller
class UserController {
void updateUser(User user) {
// Logic xử lý
}
}
// View
class UserView extends StatelessWidget {
// UI components
}
class UserViewModel extends ChangeNotifier {
User _user;
User get user => _user;
void updateUser(User newUser) {
_user = newUser;
notifyListeners();
}
}
abstract class UserRepository {
Future<User> getUser(int id);
Future<void> saveUser(User user);
}
class UserRepositoryImpl implements UserRepository {
final RemoteDataSource remote;
final LocalDataSource local;
UserRepositoryImpl(this.remote, this.local);
@override
Future<User> getUser(int id) async {
// Implementation
}
}
class ApiClient {
static final ApiClient _instance = ApiClient._internal();
factory ApiClient() {
return _instance;
}
ApiClient._internal();
}
abstract class Button {
void render();
}
class ButtonFactory {
static Button createButton(String type) {
switch (type) {
case 'material':
return MaterialButton();
case 'cupertino':
return CupertinoButton();
default:
throw Exception('Unknown button type');
}
}
}
class DataStream {
final _controller = StreamController<Data>();
Stream<Data> get stream => _controller.stream;
void updateData(Data data) {
_controller.sink.add(data);
}
}
class UserBuilder {
String? name;
String? email;
UserBuilder setName(String name) {
this.name = name;
return this;
}
User build() {
return User(name!, email!);
}
}
dependencies:
firebase_core: ^2.24.2
firebase_auth: ^4.15.3
cloud_firestore: ^4.13.6
firebase_storage: ^11.5.6
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
runApp(MyApp());
}
Future<UserCredential> signUpWithEmail(String email, String password) async {
try {
return await FirebaseAuth.instance.createUserWithEmailAndPassword(
email: email,
password: password,
);
} on FirebaseAuthException catch (e) {
throw _handleAuthError(e);
}
}
Future<UserCredential> signInWithEmail(String email, String password) async {
try {
return await FirebaseAuth.instance.signInWithEmailAndPassword(
email: email,
password: password,
);
} on FirebaseAuthException catch (e) {
throw _handleAuthError(e);
}
}
// Thêm dữ liệu
Future<void> addUser(String userId, Map<String, dynamic> userData) async {
await FirebaseFirestore.instance
.collection('users')
.doc(userId)
.set(userData);
}
// Đọc dữ liệu
Future<DocumentSnapshot> getUser(String userId) async {
return await FirebaseFirestore.instance
.collection('users')
.doc(userId)
.get();
}
// Cập nhật dữ liệu
Future<void> updateUser(String userId, Map<String, dynamic> newData) async {
await FirebaseFirestore.instance
.collection('users')
.doc(userId)
.update(newData);
}
// Xóa dữ liệu
Future<void> deleteUser(String userId) async {
await FirebaseFirestore.instance
.collection('users')
.doc(userId)
.delete();
}
Stream<QuerySnapshot> getUsersStream() {
return FirebaseFirestore.instance
.collection('users')
.snapshots();
}
// Sử dụng trong Widget
StreamBuilder<QuerySnapshot>(
stream: getUsersStream(),
builder: (context, snapshot) {
if (snapshot.hasError) {
return Text('Có lỗi xảy ra');
}
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
}
return ListView(
children: snapshot.data!.docs.map((doc) {
return ListTile(
title: Text(doc['name']),
);
}).toList(),
);
},
)
Future<String> uploadFile(File file, String path) async {
try {
final ref = FirebaseStorage.instance.ref().child(path);
final uploadTask = ref.putFile(file);
final snapshot = await uploadTask.whenComplete(() {});
return await snapshot.ref.getDownloadURL();
} catch (e) {
throw Exception('Lỗi khi upload file: $e');
}
}
Future<void> downloadFile(String url, String localPath) async {
try {
final ref = FirebaseStorage.instance.refFromURL(url);
final file = File(localPath);
await ref.writeToFile(file);
} catch (e) {
throw Exception('Lỗi khi download file: $e');
}
}
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read: if request.auth != null;
allow write: if request.auth.uid == userId;
}
}
}
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read: if request.auth != null;
allow write: if request.auth != null;
}
}
}
Flutter được xây dựng với kiến trúc layer, trong đó mỗi layer được xây dựng dựa trên các layer bên dưới. Kiến trúc này bao gồm:
Flutter Engine là core của framework, được viết bằng C++, cung cấp các chức năng low-level như:
Foundation Library cung cấp các lớp và hàm cơ bản được sử dụng để xây dựng ứng dụng Flutter, bao gồm:
Layer này chịu trách nhiệm cho:
Flutter sử dụng widget như building blocks để xây dựng UI. Có hai loại widget chính:
Flutter cung cấp nhiều giải pháp quản lý state:
// Provider Example
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (context) => MyState(),
child: MaterialApp(
home: MyHomePage(),
),
);
}
}
Flutter sử dụng Platform Channels để giao tiếp với native code:
static const platform = MethodChannel('samples.flutter.dev/battery');
// Gọi native code
final int result = await platform.invokeMethod('getBatteryLevel');
lib/
|- api/
|- models/
|- providers/
|- screens/
|- widgets/
|- utils/
|- main.dart
Một số điểm cần lưu ý về hiệu năng: