一.实例变量:简单的来说就是给对象赋值
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()