面向对象

"""

class OldboyStudent():

def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex


s1 = OldboyStudent('李坦克','男',18)
s2 = OldboyStudent('欧阳','men',18)
s3 = OldboyStudent('li','men',22)


a = s1.name
print(a)
s2.name = '王三炮'
print(s2.name)
s2.course = 'python'
b = s2.__dict__
print(b)
del s2.course
c = s2.__dict__
print(c)
print(id(OldboyStudent))
print(id(s1.name))
print(id(s2.name))
"""

"""
class OldboyStudent():
school = 'oldboy'
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex

def learn(self):
print("%s is learning"%self.name)

def eat(self):
print("%s is eating"%self.name)

def sleep(self):
print("%s is sleeping" %self.name)



s1 = OldboyStudent('李坦克','男',18)
s2 = OldboyStudent('欧阳','men',18)
s3 = OldboyStudent('li','men',22)


# OldboyStudent.learn(s1)
# OldboyStudent.eat(s2)
# OldboyStudent.sleep(s3)
# a = OldboyStudent.school
# print(a)

s1.learn()
"""
"""
class student():
def __init__(self,name,age,high):
self.name = name
self.age = age
self.high = high

def learn(self):
print("好好学习!!!!")

def eat(self):
print("好好吃饭")

def sleep(self):
print("好好睡觉!!!")


s2 = student('xiaohui',18,170)
s2.learn()
s2.sleep()
"""


import time
class libai():
def __init__(self,name,age):
self.name =name
self.age = age

def mingcheng(self):
print("我的名字是 %s " %self.name)

def gjl(self):
a = self.age + 2
return a

def smz(self):
b = 100
return b




class hanxin():
def __init__(self, name, age):
self.name = name
self.age = age

def mingcheng(self):
print("我的名字是 %s " % self.name)

def gjl(self):
a = self.age + 14
return a

def smz(self):
b = 100
return b



s1 = libai('李白',20)
s2 = hanxin('韩信',19)

def ooo():
H = 100
L = 100

d = 1
while True:
d+=1
print('李白打韩信')
H =H - s1.gjl()
print("韩信的生命值",H)
time.sleep(1)
print('韩信打李白')
L = L-s2.gjl()
print("李白的生命值",L)
time.sleep(1)
if H <= 0:
print("韩信已经死亡")
break
elif L <= 0:
print("李白已经死亡")
break
else:
print("第 " + str(d) + "回合开始")


print("游戏结束!!")

username = input("你叫什么名字?")
lll = input("你好" + username +"这是一个韩信和李白的凄惨爱情故事 " '输入 ok 开始游戏!!!')
if lll == 'ok':
ooo()


"""
class One:
pass

class Two:
pass
class Three(One):
pass

class Four(Two):
pass

a = Three.__bases__
print(a)

b = Four.__bases__
print(b)

c = One.__bases__
print(c)

d = Two.__bases__
print(d)

"""

class animal:
def __init__(self,name):
self.name = name
def eat(self):
print('吃')

def sleep(self):
print("睡觉")

def jiao(self):
print("叫")


class pople(animal):
def f1(self):
print('玩游戏')

class pig(animal):
def f2(self):
print("打滚")

class dog(animal):
def f3(self):
print("看家护院")

a = pople.sleep('xiaoming')
r = dog('buqi')
r.jiao()

pople.f1("xiaohong")

pople.__f1__

# 示范代码
"""
class A(object):
def test(self):
print("from A")

class B(A):
def test(self):
print("from B")

class C(A):
def test(self):
print('from C')

class D(B):
def test(self):
print('from D')

class E(C):
def test(self):
print("from E")

def F(D):
def test(self):
print("from F")

pass

f1 = F("xiaohui")
f1.test
print(F.test)
"""


# 下面两个都是继承
# 在子类中调用父类的方法
"""
class Vehice:
Country = 'china'

def __init__(self,name,speed,load,power):
self.name = name
self.speed = speed
self.load = load
self.poert = power

def run(self):
print('开车了!!!!')

class Subway(Vehice):
def __init__(self,name,speed,load,power,line):
Vehice.__init__(self,name,speed,load,power)
self.line = line

def run(self):
print("地铁%s 号线欢迎您" %self.name)
Vehice.run(self)

line1 = Subway('中国地铁','300m/s','100人/厢','电','1')
line1.run()


"""



# 用了super
"""
class Vehice:
Country = 'china'

def __init__(self,name,speed,load,power):
self.name = name
self.speed = speed
self.load = load
self.poert = power

def run(self):
print('开车了!!!!')

class Subway(Vehice):
def __init__(self,name,speed,load,power,line):
super().__init__(name,speed,load,power)
self.line = line

def run(self):
print("地铁%s 号线欢迎您" %self.name)
Vehice.run(self)



class Mobike(Vehice):
def dan(self):
print("哇呜呜呜呜呜 ,小单车来了")


line1 = Subway('中国地铁','300m/s','100人/厢','电','1')
line1.run()
"""


# 组合
"""
class Equip:
def fire(self):
print("release Fire skill")

class Riven:
camp = 'Noxus'
def __init__(self,nickname):
self.nicknsme = nickname
self.equip = Equip()

r1 = Riven('ouayng')

r1.equip.fire()#可以使用组合的类产生的对象所持有的方法

"""
# 用组合的方式建立了类与组合的类之间的关系,他是一种'有'的关系,比如教授有生日,教授教python和linux课程
# 教授有学生s1,s2,s3
# example
class pople:
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex

class Course:
def __init__(self,name,period,price):
self.name = name
self.period = period
self.price = price

def tell_info(self):
print('<%s %s %s>'%(self.name,self.period,self.price))

class Teacher(pople):
def __init__(self,name,age,sex,job_title):
super().__init__(name,age,sex)
self.job_title = job_title
self.course = []
self.student = []

class Student(pople):
def __init__(self,name,age,sex):
super().__init__(name,age,sex)
self.course = []


egon = Teacher('egon',18,'men','沙河霸道金牌讲师')
s1 = Student('张三',20,'men')

# 创建课程
python = Course('python','3mons',3000.0)
linux = Course('linux','2mons',4000.0)


# 为老师和学生添加课程
egon.course.append(python)
egon.course.append(linux)
s1.course.append(python)

# 为老师添加学生
egon.student.append(s1)


for i in egon.course:
print(i)

for i in egon.student:
print(i)

r = egon.student
print(r)





# 多态与多态性
# 多态指的是一类事物有多种形态,比如动物有多种形态:人,猪,狗

"""
s = str('hello')
l = list([1,2,3])
t = tuple((4,5,6))

s.__len__()
l.__len__()
t.__len__()

len(s)
len(l)
len(t)
"""
# 封装
# 封装 = 隐藏
# 在python中,用双下划线(__)开头的方式将属性隐藏起来
# 其实这仅仅是一种变形操作
# 类中所有双下划綫开头的名称如__x都会自动变形成: _类名__x的形式:

#正常情况
"""
class A:
def fa(self):
print('from A')

def test(self):
self.fa()

class B(A):
def fa(self):
print('from B')

b = B()
b.test()
"""
# 吧fa定义成私有的,即__fa
"""
class A:
def __fa(self):
print('from A')

def test(self):
self.__fa()

class B(A):
def __fa(self):
print('from B')

b = B()
b.test()
"""

# 封装不是单纯意义的隐藏
# 1、封装数据
# 将数据隐藏起来不是目的。隐藏起来然后对外提供操作该数据的接口,
# 然后我们可以在接口附加上对该数据上操作的限制,以此完成对数据属性操作的严格控制
"""
class Teacher:
def __init__(self,name,age):
self.__name = name
self.__age = age

def tell_info(self):
print('姓名:%s,年龄:%s' %(self.__name,self.__age))

def set_info(self,name,age):
if not isinstance(name,str):
raise TypeError('姓名必须是字符串类型')

if not isinstance(age,int):
raise TypeError("年龄必须是整数型")
self.__name = name
self.__age = age

t = Teacher("ouyang",18)
t.tell_info()

r = Teacher("xiaohui",19)
r.set_info('ll',12)

"""

# 2、封装方法:目的是隔离复杂度
# 取款是功能,而这个功能有很多的功能组成:插卡,密码认证,输入金额,打印账单,取钱
# 而对于使用者来说,只需要知道取款这个功能即可,其余功能我们都可以隐藏起来,
# 很明显这么做隔离了复杂度,同时也提升了安全性
"""
class ATM:
def _card(self):
print('插卡')

def _suth(self):
print('用户认证')

def _input(self):
print('输入取款金额')

def _print_bill(self):
print("打印账单")

def _take_money(self):
print('取款')


def withdraw(self):
self._card()
self._suth()
self._input()
self._print_bill()
self._take_money()

a = ATM()
a.withdraw()


"""


# *****特性(property)******

# property 是一种特殊的属性,访问他时会执行一段功能(函数)然后返回值
# Ex:BMI指数 188页
"""
class People:
def __init__(self,name,weight,height):
self.name = name
self.weight = weight
self.height = height

@property
def bmi(self):
return self.weight / (self.height**2)

p1 = People('ouyang',75,1.75)
print(p1.bmi)
"""

# ex:'晓晖'
"""
class People:
def __init__(self,name,weight,height):
self.name = name
self.weight = weight
self.height = height

@property
def bmi(self):
return self.weight/(self.height**2)

p1 = People('xiaohui',65,1.60)
print(p1.bmi)

"""


# example 二
# 圆的周长和面积
"""
import math
class Circle:
def __init__(self,radius):
self.radius = radius

@property
def area(self):#area面积
return math.pi*self.radius**2

@property
def perimeter(self):#perimeter周长
return math.pi*2*self.radius
c = Circle(10)
print(c.radius)
print(c.area)
print(c.perimeter)
"""

# 绑定方法

# 绑定给对象的方法
# 绑定给类的方法(classmethod)
# classmethod是给类用的,即绑定到类,类在使用时会将类本身当做参数传给
# 类方法的第一个参数(即是对象来调用也会将类当做第一个参数传入)
# python为我们内置了函数classmethod来把类中的函数定义成类方法


# 非绑定方法 在内部用staticmethod 装饰的函数即非绑定方法,就是普通函数
# statimethod不与类或对象绑定,谁都可以调用,没有自动传值效果
"""
import hashlib
import time
class MySQL:
def __init__(self,host,port):
self.id = self.create_id()
self.host = host
self.port = port


@staticmethod
def create_id():
m = hashlib.md5(str(time.time()).encode( 'utf-8'))
return m.hexdigest()

print(MySQL.create_id())
conn = MySQL('127.0.0.1',3306)
print(conn.create_id())



"""






原文地址:https://www.cnblogs.com/ouyang99-/p/9066073.html