//如果类中需要非该类成员存在,则可以使用静态调用的方法@staticmethds
from math import sqrt
class triangle(object):
def __init__(self,a,b,c):
self.a = a
self.b = b
self.c = c
@staticmethod
def is_valid(a,b,c):
return a + b >c and b + c > a and a + c > b
def perimeter(self):
return self.a + self.b + self.c
def area(self):
half = self.perimeter() / 2
return sqrt(half * (half - self.a) * (half - self.b) * (half - self.c))
def main():
a,b,c = 4,5,6
//静态方法和类方法都是通过给类发消息来调用的
if triangle.is_valid(a,b,c):
t = triangle(a,b,c)
print(t.perimeter())
//也可以通过给类发消息来调用对象方法但是要传入接收消息的对象作为参数
#print(triangle.perimeter())
print(t.area())
#print(triangle.area(t))
else:
print('无法构成三角形')
if __name__ == '__main__':
main()
私有变量不可继承
"""
@classmethod:获取自身类(cls)中的属性,并且可以更改.
classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等
"""
from time import time, localtime, sleep
class Clock(object):
"""数字时钟"""
def __init__(self, hour=0, minute=0, second=0):
self._hour = hour
self._minute = minute
self._second = second
@classmethod
def now(cls):
ctime = localtime(time())
return cls(ctime.tm_hour, ctime.tm_min, ctime.tm_sec)
def run(self):
"""走字"""
self._second += 1
if self._second == 60:
self._second = 0
self._minute += 1
if self._minute == 60:
self._minute = 0
self._hour += 1
if self._hour == 24:
self._hour = 0
def show(self):
"""显示时间"""
return '%02d:%02d:%02d' % \
(self._hour, self._minute, self._second)
def main():
# 通过类方法创建对象并获取系统时间
clock = Clock.now()
while True:
print(clock.show())
sleep(1)
clock.run()
if __name__ == '__main__':
main()
class A(object):
def __init__(self):
self.a = 100
def A1(self):
print('A1')
class B(A):
def __init__(self):
A.__init__(self)
#这里的A.__init__(self)相当于走了一次class A
#继承:B从A那里继承了他的属性,也可由有自己的属性
self.b = 200
def B1(self):
print('B1')
b_ = B()
print(b_.a)
b_.A1()
私有变量不可继承
想调用:1、使用访问器 2、找真名
在一个test内写config配置文件
被class调用时,如需改变统一配置,在test中统一修改即可
a = [x for x in range(100)]
print(a)
可以使用if函数,但不能使用else
a = (x for x in range(100000000) if x % 2 == 0)
for i in range(100):
print(next(a))
import os
path = '地址‘
res = os.lisdir(path)
print(res)
genter = (dir_ for dir_ in res)
返回所有文件,改成生成器
def foo():
def bar():
def bar2():
return 'hello'
return bar2
return bar
f1 = foo()
print(fi)
f2 = f1()
print(f2())
#结果:hello
def deco(func):
print('HELLO1')
def warp():
print('HELLO')
return func()
return warp
@deco
def Joker():
print('hello')
Joker()
#结果:HELLO1 HELLO hello
def foo():
l = []
def bar(i):
l.append(i)
return l
return bar
fi = foo()
res1 = f1(1)
print(res1)
def Joker(func):
def warp(n1,n2,n3):
num = n1 + n2
return func(0,num,n3)
return warp
#装饰器将前两个数字求和,函数本身第三个参数乘上这个和
@Joker
def SUM(num1,num2,num3):
print(num1,num2,num3)
print(num2 * num3)
SUM(10,2,3)
#结果:0 12 3
#36