Я пришел к Python с PHP, поэтому я перепутал некоторые вещи, которые я делал в PHP. Например, у меня есть класс Database_object, который имеет некоторые распространенные методы базы данных, такие как:
class DatabaseObject {
protected static $table_name;
protected static $db_fields;
public static function find_all() {
return self::find_by_query("SELECT * FROM ".static::$table_name);
}
...
private static function instantiate($record) {
$object = new self;
foreach($record as $attribute=>$value) {
if($object->has_attribute($attribute)) {
$object->$attribute = $value;
}
}
return $object;
}
}
И некоторые дочерние классы, такие как:
class User extends DatabaseObject {
protected static $table_name = "users";
protected static $db_fields = array('id', 'gid', 'username', 'hashed_password', 'first_name', 'last_name', 'e_mail', 'phone_number', 'position', 'last_login', 'comment', 'supplier_id');
У меня есть вопрос о реализации stati c , но теперь topi c как сделать этот экземпляр метод в Python? У меня есть метод, подобный этому:
def FindAll(self):
query = 'SELECT * FROM ' + self._TableName
try:
self.cur.execute(query)
except(ValueError):
print("Error " + ValueError)
else:
return self.cur.fetchall()
Но этот возвращает массивы, и я хочу сделать их объектами, как в методе экземпляра в PHP. Например, если я вызываю FindAll для пользовательского класса. Я хочу получить массив пользователей, а затем использовать их как:
for user in users:
print("Username: {}, Name: {} {}".format(user.username, user.first_name, user.second_name)
, а не:
print("Username: {}, Name: {} {}".format(user[1], user[3], user[4]))
, как сейчас.