• python类的成员


    一.实例变量:简单的来说就是给对象赋值

    class Person:
        def __init__(self, name, card_no, height, weight, address, laopo):
            # 实例变量. 给对象赋值
            self.name = name
            self.card_no = card_no
            self.height = height
            self.weight = weight
            self.address = address
            self.laopo = laopo
    
    p1 = Person("马化腾", "123456789123456781", 1.60, 180, "深圳市南山区南山法院", "不知道")
    p1.company = "腾讯" # 添加实例变量-> 字段 -> 属性(java)
    
    p2 = Person("刘强东", "789456132456789123", 1.65, 190, "宿迁", "奶茶妹妹")
    
    print(p2.name)
    print(p1.laopo)
    
    2类变量的修改只能通过类名来完成
    class Person:
        country = "中国"
        def __init__(self,name, age):
            self.name = name
            self.age = age
    
    # Person.country = "大清"
    # print(Person.country) # 直接使用类名进行访问
    p1 = Person("alex", 185)
    p1.country = "大清" # 添加了一个实例变量
    print(p1.name)
    print(p1.country)
    
    p2 = Person("wusir", 145)
    print(p2.name)
    print(p2.country)
    # 类变量的修改只能通过类名来完成

    3实例的方法:

    class Car:
        def run(self):
            print("会跑的车")
    
        def cul(self, a, b):
            return a + b
    
        def jump(self):
            print("you jump i jump")
    
    c = Car()
    c.run() # 调用实例方法
    print(c.cul(1 , 3))
    c.jump()

    二,类的方法

    class Person:
        def chi(self): # 实例方法
            print("人在吃")
    
        # 类方法
        @classmethod # 类方法
        def he(cls): # cls 类
            print(cls)
            print("我是喝")
    
        @staticmethod
        def shui():  # 在类中定义的一个普通函数
            print("和你睡不等于睡你 -- 姜文")
    
        @staticmethod
        def 上天(height):  # 在类中定义的一个普通函数
            print("上天%s" % height)
    
    # print(Person)
    # Person.he()
    
    # p = Person()
    # p.he() # 不管用对象还是用类去访问类方法. 默认传递进去的是类
    
    Person.shui()
    Person.上天(500)
    # p = Person()
    # p.shui()

    属性

    class User:
        def __init__(self, name, birthday, qq, email):
            self.name = name
            self.birthday = birthday
            self.qq = qq
            self.email = email
    
        # 方法
        @property # 可以把一个方法变成一个属性
        def age(self):
            return 2018 - self.birthday
        '''
            @property
            1. 函数只能有一个self参数. 
            2. 需要有返回值
            3. 不能赋值
            4. 调⽤的时候, 我们不需要写括号. 直接当成属性变量来⽤就可以了
            
        '''
    u = User("王明", 1994, 1024663304, "wangming@126.com")
    print(u.age)
    u.qq = 10010
    u.age = 18

    私有属性

    class Person:
        def __init__(self, name): # 构造, 创建对象的时候自动调用
            self.__name = name # 私有的
            print("这里是构造方法")
    
        def init(self):
            print("实例方法")
    
        def __chi(self): # 私有的
            print("我要吃. 疯狂的吃")
    
        def he(self):
            self.__chi() # 内部调用
            print("我是喝", self.__name)
    
    p = Person("孙艺珍")
    p.he()
    # # p.__init__() # 很蠢
    # p.init()
    # print(p.__name)
    

     练习

    定义一个类,其中有计算周长和面积的方法(圆的半径通过参数传递到构造方法)
    import math
    
    class Circle:
        """
            对圆的封装
        """
    
        def __init__(self, r):
            '''
    
            :param r: 半径
            '''
            self.r = r
    
        def c(self):
            '''
    
            :return:  周长
            '''
            return 2 * math.pi * self.r
    
        def s(self):
            '''
    
            :return: 面积
            '''
            return math.pi * self.r * self.r
    输入用户信息
    class UserInfo:
        """
        封装三个信息: name,pwd, email
        """
        def __init__(self, name, pwd, email):
            self.name = name
            self.pwd = pwd
            self.email = email
    lst = []
    while len(lst) < 3:
        uname = input("请输入你的用户名:")
        pwd = input("请输入你的密码:")
        email = input("请输入你的邮箱:")
        user = UserInfo(uname, pwd, email)
        lst.append(user)
    for u in lst:
        print("你叫%s, 邮箱是%s" % (u.name, u.email))
    用户注册用户登录功能
    class User: # 用户
        def __init__(self, name, pwd):
            self.name = name
            self.pwd = pwd
    
    
    class Account: # 账户
        def __init__(self):
            self.user_list = []  # 用户列表,数据格式:[User对象,User对象,User对象]
    
        def login(self):
             print("登录环节")
             ###用户登录,用户输入用户名和密码并去self,user1ist中检查用户是否合法
             username = input("请输入你的用户名:")
             password = input("请输入你的密码:")
             for u in self.user_list:
                 if username == u.name and password == u.pwd: # 成功
                     return True
             else:
                 return False
    
        def register(self):
            print("注册环节")
        ### 用户注册,动态创建User对象,并添加到self, user list中
            uname = input("请输入你的用户名:")
            psw = input("请输入你的密码:")
            u = User(uname, psw) # 创建用户对象
            self.user_list.append(u)
    
    
        def run(self):
        ### Q主程序,先进行2次用户注册,再进行用户登录(3次重试机
            self.register()
            self.register()
            # self.user_list = >  [user, user]
            # 三次登录....
            for i in range(3):
                ret = self.login()
                if ret == True:
                    print("登录成功")
                    break
            else:
                print("太失败了. 三次都没成功")
    
    # 当前py文件是否是启动文件
    if __name__ == "__main__": # 模块.
        obj = Account()
        obj.run()
    

      

  • 相关阅读:
    很长的下拉框菜单
    Pure CSS Buttons – Good Button Style and No Images
    ssh 配置
    php大量session存储到内存中,散列及过期回收
    array_append_distinct, array_erase函数
    关于C# 中的Attribute 特性(转载)
    Jquery如何操作Table的某一个td
    ASP.NET应用程序生命周期趣谈(四) HttpHandler和页面生命周期
    ASP.NET应用程序生命周期趣谈(五) IIS7瞎说
    ASP.NET应用程序生命周期趣谈(三)
  • 原文地址:https://www.cnblogs.com/liucsxiaoxiaobai/p/9925011.html
Copyright © 2020-2023  润新知