python 类

在面向对象的语言中,万物皆对象,而这些个对象,根据其特点,又可以归为某一类。对于这一类可以定义相应的对象,这一过程称为实例化。这一类所对应的对象具有相同的属性,或者行为方法。例如:定义一个人类,他所实例化的对象都有着相同的属性:身高、性别、姓名等。也有相同的行为方法,比如吃饭、睡觉等。

创建类和实例

创建类

首先,我们创建一个简单的人类。在python中,类的关键字是Class。我们这个人(Person)类中,属性有姓名、年龄。方法有吃饭,睡觉。

''' 此处我们定义的一个Person类 '''
class Person():
     ''' 
        __init__ 是一个特殊方法,在用类实例化对象时会被自动调用
        self是第一个参数,代表着实例本身,在方法中,可利用self调用对应的属性或方法,在方法调用时self不用手动传递。
        name和age是需要传递的两个形参
        self.name和self.age是类的两个属性。
     
     '''
    def __init__(self, name, age):
        self.name = name
        self.age = age
    ''' eat和sleep 是两个比较简单的方法,调用时不需要传参,self是自动传入的 '''
    def eat(self):
        print("{} is now eatting".format(self.name.title()))
     
    def sleep(self):
        print("{} is now sleeping".format(self.name.title()))
创建实例
# 调用类名创建对象,传入的两个参数分别对应__init__中的name,age。
person = Person("zhangsan", 20)
print(type(person))
class '__main__.Person'>
  • 访问对象属性

可以使用.句点访问,对象的成员属性。

例如:person.name

# title()是字符串首字母大写的一个方法
print("my name is {}.".format(person.name.title()))
# {:d} 数字十进制输出的占位符
print("I am {:d} years old.".format(person.age))
my name is Zhangsan.
I am 20 years old.
  • 调用方法

方式和调用属性一样,使用.句点。

person.eat()
person.sleep()
Zhangsan is now eatting
Zhangsan is now sleeping
  • 创建多个实例对象
# person 和 person1是两个不同的人对象
person = Person("zhangsan", 20)
person1 = Person("lisi", 25)

print("person name is {}.".format(person.name.title()))
print("person am {:d} years old.".format(person.age))
person.eat()

print("\n")

print("person1 name is {}.".format(person1.name.title()))
print("person1 am {:d} years old.".format(person1.age))
person name is Zhangsan.
person am 20 years old.
Zhangsan is now eatting


person1 name is Lisi.
person1 am 25 years old.
Lisi is now sleeping

用户类

定义一个User类,其中包含属性:用户名、密码、年龄、性别。方法包括:获取用户信息、修改用户名、修改密码。其他方法可自行扩展

class User():
    # 此处passwd是一个默认参数,即默认密码123456
    def __init__(self, name, sex, age, passwd = "123456"):
        self.user_name = name
        self.sex = sex
        self.age = age
        self.passwd = passwd
    def get_user_info(self):
        return self.user_name, self.sex, self.age, self.passwd

    def update_user_name(self, name):
        self.user_name = name
    
    # 此处加一简单逻辑,需要原密码判断,可自行尝试,如:可重试三次,密码强度校验等功能
    def update_user_passwd(self, passwd):
        old_passwd = input("请输入原密码:")
        if old_passwd == self.passwd:
            self.passwd = passwd
            print("密码修改成功")
        else:
            print("原密码错误,修改失败")

user1 = User("lisi", "男", 24)
user_info = user1.get_user_info()
print(user_info)
user1.update_user_name("zhangsan")
user_info = user.get_user_info()
print("修改用户名后:")
print(user_info)
user1.update_user_passwd("q12q23")

先写个错误密码

('lisi', '男', 24, '123456')
修改用户名后:
('zhangsan', '男', 24, '123456')
请输入原密码:1234
原密码错误,修改失败
修改密码后:
('zhangsan', '男', 24, '123456')

再写个正确密码

('lisi', '男', 24, '123456')
修改用户名后:
('zhangsan', '男', 24, '123456')
请输入原密码:123456
密码修改成功
修改密码后:
('zhangsan', '男', 24, 'q12q23')
  • 修改成员属性
user1 = User("lisi", "男", 24)
user_info = user1.get_user_info()
print(user_info)
user1.age = 25
user_info = user1.get_user_info()
print("修改年龄后:")
print(user_info)
('lisi', '男', 24, '123456')
修改年龄后:
('lisi', '男', 25, '123456')

继承

在定义类时,类名后面的括号可以为空,表示从空白开始建立一个类;也可以写上另一个类名,表示当前定义的类继承括号中的类。其中,当前类称为子类,被继承的类称为父类。

子类的初始化
class UserVip(User):
    def __init__(self, name, sex, age, passwd = "123456"):
        super().__init__(name, sex, age, passwd)
user = UserVip("lisi", "男", 32)
print(user.get_user_info())
('lisi', '男', 32, '123456')

super()是一个特殊函数,帮助将父类和子类关联起来,后面另说。

子类特有属性和方法

子类除继承父类的属性和方法外,也可以自己定义属性和方法。

class UserVip(User):
    def __init__(self, name, sex, age, level = 1, passwd = "123456"):
        super().__init__(name, sex, age, passwd)
        # level是vip用户特有的属性
        self.level = level
    # get_vip_user_info用于获取VIP用户的信息
    def get_vip_user_info(self):
        return self.user_name, self.sex, self.age, self.passwd, self.level
user = UserVip("lisi", "男", 32,3)
print(user.get_vip_user_info())
('lisi', '男', 32, '123456', 3)
重写父类的方法
class UserVip(User):
    def __init__(self, name, sex, age, level = 1, passwd = "123456"):
        super().__init__(name, sex, age, passwd)
        # level是vip用户特有的属性
        self.level = level
    # get_user_info方法被重写,多返回一个VIP等级
    def get_user_info(self):
        return self.user_name, self.sex, self.age, self.passwd, self.level
user = UserVip("lisi", "男", 32,3)
print(user.get_user_info())
('lisi', '男', 32, '123456', 3)
将一个实例作为属性
# VipCard是新定义的会员卡类
class VipCard():
    def __init__(self, card_num, money):
        self.card_num = card_num
        self.money = money
    def vip_card_info(self):
        return self.card_num, self.money

class UserVip(User):
    def __init__(self, name, sex, age, card_num, money, level = 1, passwd = "123456"):
        super().__init__(name, sex, age, passwd)
        self.level = level
        # 实例化一个会员卡实例,赋值给一个会员的卡属性
        self.card = VipCard(card_num, money)
    def get_user_info(self):
        return self.user_name, self.sex, self.age, self.passwd, self.level
user = UserVip("lisi", "男", 32, "N00001", 1000, 3)
print("会员信息:")
print(user.get_user_info())
print("会员卡信息:")
# 调用获取会员卡信息的方法,获取到会员卡信息
print(user.card.vip_card_info())
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ghost_199503

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值