Tôi đang cố gắng sử dụng một chút kế thừa trong một chương trình Python mà tôi đang làm việc. Tôi có một lớp cơ sở, Người dùng, thực hiện tất cả chức năng của người dùng. Tôi đang thêm khái niệm về một người dùng không được chấp thuận, giống như một người dùng, với việc bổ sung một phương thức duy nhất.Làm thế nào để bạn đưa một thể hiện vào một lớp dẫn xuất?
Lớp người dùng có một số phương thức trả về đối tượng Người dùng. Điều này sẽ không hoạt động khi tôi phân lớp, vì tôi sẽ kết thúc có một Người dùng không được chấp thuận trả lại một Người dùng, ngăn tôi gọi phương thức này, trong số những thứ khác.
class User(object):
base_dn = 'ou=Users,dc=example,dc=org'
@classmethod
def get(cls, uid):
ldap_data = LdapUtil.get(uid + ',' + self.base_dn)
return User._from_ldap(ldap_data)
class UnapprovedUser(User):
base_dn = 'ou=UnapprovedUsers,dc=example,dc=org'
def approve(self):
new_dn = '' # the new DN
LdapUtil.move(self.dn, new_dn)
Các get()
và _from_ldap()
phương pháp là như nhau cho cả hai lớp, mặc dù get()
phương pháp trong UnapprovedUser cần phải trả lại một đối tượng UnapprovedUser, không phải là một tài khoản.
Tôi làm cách nào để truyền một trong các phiên bản Người dùng mà tôi nhận được từ User.get()
vào Người dùng không được chấp thuận?
tôi muốn làm một cái gì đó như:
class UnapprovedUser(User):
# continued from before
@classmethod
def get(cls, uid):
user = super(UnapprovedUser, cls).get(uid)
return (UnapprovedUser) user # invalid syntax
để tôi có thể quấn phương pháp từ cha mẹ và chỉ cần đúc giá trị trả về đến lớp đúng. Sau đó, một lần nữa, làm theo cách đó có thể dẫn đến phụ huynh sử dụng giá trị của chúng cho self.base_dn
, điều này sẽ phá vỡ mọi thứ.
Chính xác những gì tôi đang tìm kiếm. Cảm ơn. Tôi đoán tôi không bao giờ nhận thấy rằng bạn có thể làm điều đó với tham số cls vào một phương thức lớp. –